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和查询不做我想要它做的,同一项目的多个实例为所有日期仍然显示。谢谢你的努力!