首页 > 解决方案 > 查询获取最新日期的行

问题描述

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。

标签: sqlcrystal-reports

解决方案


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 前面缺少一个“[”,而且查询没有按照我的意愿执行,所有日期的同一项目的多个实例仍然显示。谢谢你的尝试!


推荐阅读