分组报告

时间:2018-08-09 11:41:22

标签: tsql

我正在使用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在某个地方出错了-但我看不到哪里。

1 个答案:

答案 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的第一行。