查询获取日期最近的行



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相结合的主数据(只需要从中提取组代码),并首先用组代码过滤IPF1。然后继续为每个项目执行Max Date或Max doccentry ID。

您可以使用distinct来获取每个事件的一行,即使它们有不同的日期,并在select

上使用MAX
SELECT distinct T0.[ItemCode], 
T0.[PriceFOB], 
T0.[PriceAtWH], 
T0.[DocEntry], 
T0.[CardCode], 
T3.[CardName], 
MAX(T2.[DocDate] ) DocDate
FROM IPF1 T0     
LEFT JOIN OIPF T2 
ON T0.[DocEntry]=T2.DocEntry]
INNER JOIN OCRD T3 
ON T0.[CardCode] = T3.[CardCode] 
WHERE T3.[GroupCode] = '105'
GROUP BY T0.[ItemCode], T0.[PriceFOB], T0.[PriceAtWH], T0.[DocEntry], T0.[CardCode],T3.[CardName]

WITH T AS (SELECT T10。T10 [DocEntry]。T10 [CardCode]。T10 [ItemCode]。T10 [PriceFOB]。从IPF1 T10内部连接OCRD T11到T10。[CardCode] = T11。[CardCode] WHERE[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.[doctry] DESC) AS ROWNUM FROM T) T WHERE ROWNUM = 1

所以我最终解决了我自己的问题。

谢谢你Julissa的尝试,但你的查询有一个错误,你错过了"["在前面的doctry和查询不做我想要它做的,同一项目的多个实例为所有日期仍然显示。谢谢你的努力!