首页 > 解决方案 > 在报告中分组

问题描述

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

标签: tsql

解决方案


之前在 stackoverflow上已经回答了一个这样做的技巧。在这里它适用于您的查询:

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


推荐阅读