【发布时间】:2019-07-28 07:06:45
【问题描述】:
专家, 我有一个查询向我显示 Order 和 Invoice 表的最新 Item 活动。我需要进一步缩小范围,每个项目只显示一个结果 - 最新活动,无论是订单还是发票......
SELECT A.ItemCode, A.ObjType, A.DocNum, A.LastActivity
FROM
(SELECT T0.[ItemCode], T1.[ObjType], T1.[DocNum], T1.[DocDate] AS 'LastActivity',
ROW_NUMBER() OVER (PARTITION BY T0.ItemCode ORDER BY T0.DocEntry DESC) AS 'rownum'
FROM INV1 T0
INNER JOIN OINV T1 ON T0.[DocEntry]=T1.[DocEntry]
WHERE T0.[ItemCode] = 'A00001_ test non inventory' OR T0.[ItemCode] = 'A00001'
UNION ALL
SELECT T0.[ItemCode], T1.[ObjType], T1.[DocNum], T1.[DocDate] AS 'LastActivity',
ROW_NUMBER() OVER (PARTITION BY T0.ItemCode ORDER BY T0.DocEntry DESC) AS 'rownum'
FROM RDR1 T0
INNER JOIN ORDR T1 ON T0.[DocEntry]=T1.[DocEntry]
WHERE T0.[ItemCode] = 'A00001_ test non inventory' OR T0.[ItemCode] = 'A00001'
) A
WHERE A.rownum=1;
【问题讨论】:
-
Top 1 ...不起作用吗? -
在第一个 SELECT 中添加 Top 1 时,它只带回一个项目记录。当我将它添加到 2 个嵌入式 SELECTS 时,它为 SO 和 Invoice 带回了相同的项目。
-
如果您可以添加一些示例数据或使用此查询获得的输出,它可能会更清楚。
标签: sql tsql greatest-n-per-group