sql - 查询获取最新日期的行
问题描述
SELECT T0.[ItemCode], T0.[PriceFOB], T0.[PriceAtWH], T0.[DocEntry], T0.[CardCode], T2.[DocDate], T3.[CardName] FROM IPF1 T0 LEFT JOIN OIPF T2 ON T2.[DocDate] = (SELECT MAX(T4.[DocDate]) FROM OIPF T4 WHERE T0.[DocEntry]=T4.[DocEntry]) INNER JOIN OCRD T3 ON T0.[CardCode] = T3.[CardCode] WHERE T3.[GroupCode] = '105'
我正在使用上面列出的以下查询。
当我列出了多行相同项目但我的目标是获得具有最新 DocDate 的项目时,问题就出现了。
如果有人可以帮助并解释我做错了什么。
我尝试过 Order By、Group By 但不断收到多个错误(主要是语法)
SELECT ItemCode, PriceAtWH, DocEntry, PriceFOB, CardCode FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY T0.[ItemCode] ORDER BY T0.[DocEntry] DESC) AS ROWNUM FROM IPF1 T0) IPF1 WHERE ROWNUM = 1
这是我能够接近我的解决方案的另一个查询,但我需要它从与 CardCode 匹配的 OCRD 中仅过滤 GroupCode = '105'
主要目标是过滤掉与IPF1和OCRD组合的Master DATA(只需要从中提取Group Code)并首先用Group Code过滤IPF1。然后继续为每个项目执行 Max Date 或 Max DocEntry ID。
解决方案
WITH T AS (SELECT T10.[DocEntry], T10.[CardCode], T10.[ItemCode], T10.[PriceFOB], T10.[PriceAtWH] FROM IPF1 T10 INNER JOIN OCRD T11 ON T10.[CardCode] = T11。 [CardCode] WHERE T11.[GroupCode] = '105') SELECT T.[DocEntry], T.[CardCode], T.[ItemCode], T.[PriceFOB], T.[PriceAtWH] FROM (SELECT *, ROW_NUMBER () OVER (PARTITION BY T.[ItemCode] ORDER BY T.[DocEntry] DESC) AS ROWNUM FROM T) T WHERE ROWNUM = 1
所以我最终解决了我自己的问题。
感谢 Julissa 尝试购买您的查询有一个错误,您在 DocEntry 前面缺少一个“[”,而且查询没有按照我的意愿执行,所有日期的同一项目的多个实例仍然显示。谢谢你的尝试!
推荐阅读
- c# - 如何将 ASP.NET Core 应用程序和 Redis 一起 dockerize?
- python - Xarray Dataarray查找最大值行
- azure - 在 Azure 容器服务中停止和启动数据时,如何将数据保留在容器中?
- c - 如何修复结构返回函数中的“预期标识符”或“(”之前的“int”错误
- javascript - 从查询字符串中提取数据,然后调用 API 和渲染组件的最佳位置是什么?
- python - 如何在一批图像中找到具有特定值的图像的位置
- java - 从可调用接口将参数传递给函数调用
- python - 从文本字符串创建表/csv
- ruby-on-rails - 如何编写 CanCanCan 用户只能读取其数据的能力?
- amazon-cloudformation - 如何使用 CloudFormation 定义 ECR 生命周期策略