我正在使用t-sql。
我有4个工作托盘,我想要一个报告,其中提供每个工作托盘的名称,最旧的帖子项目以及其他几个字段。它必须限制为4行-每个工作托盘一个。
所以目前我有这个:
SELECT WorkTray, MIN(Date) AS [OldestDate], RefNo, NameofItem
FROM ...
GROUP BY WorkTray,RefNo, NameofItem
ORDER BY WorkTray,RefNo, NameofItem
但是,当我运行它时,它会为我提供每个工作托盘中的所有项目,例如,报告长达100项的项目-我只希望将其限制为4行数据,每个工作托盘一个数据:
Work Tray Date RefNo NameofItem
A 1/2/15 25 Outstanding Bill
B 5/5/18 1000 Lost post
C 2/2/12 17 Misc
D 6/12/17 876 Misc
所以我确定我的GROUP BY在某个地方出错了-但我看不到哪里。
答案 0 :(得分:1)
answered on stackoverflow before就是这样做的窍门。在这里它适合您的查询:
SELECT *
FROM
(SELECT WorkTray, Date AS [OldestDate], RefNo, NameofItem, ROW_NUMBER() OVER (PARTITION BY WorkTray ORDER BY WorkTray, [Date]) AS rn
FROM MyTable
) GroupedByTray
WHERE rn = 1
PARTITION BY告诉它为每种托盘类型计算行数,并且ORDER BY的工作方式与普通的ORDER BY子句相似。假设您只有4个工作托盘(A-D),则“ WHERE rn = 1”部分将仅返回工作托盘A-D的第一行。