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 的某个地方出错了——但我看不出在哪里。
解决方案
之前在 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 的第一行。
推荐阅读
- excel - 64 位声明,PrtSafe?
- ios - iOS/Swift Core 数据合并冲突
- database - 为我的 NoSql 数据库模式建模时的注意事项
- python - 有没有更有效的方法在 Dataframe 中的每一行上带来特定值的总 .count() 值?(不合并,最好使用 lambda)
- javascript - 如何通过 jQuery 获取新的附加元素?
- javascript - 如何在 vue 项目中预加载图片
- c - C:MacLaurin 系列的自动错误检测并与内置的 sinx() 进行比较
- python - 从匀称导入几何 - 找不到指定的模块
- sql - 使用来自其他列的值创建一个非空列
- vxworks - 在 vxworks 中打印应用程序崩溃的堆栈跟踪