【发布时间】:2021-09-05 14:36:50
【问题描述】:
我在 SQL Server 中有 GROUP BY / MAX(.) 的情况。请考虑下表Tab1,其中包含每年重复的课程条目:
| studentName | Course | startDate | finishDate |
|---|---|---|---|
| N1 | C1 | 2020-01-01 | NULL |
| N1 | C1 | 2019-01-01 | 2019-02-01 |
| N1 | C1 | 2018-01-01 | 2018-02-01 |
| N2 | C1 | 2020-01-01 | 2020-02-01 |
| N2 | C1 | 2019-01-01 | NULL |
| N2 | C1 | 2018-01-01 | 2018-02-01 |
| N2 | C2 | 2020-01-01 | NULL |
| N2 | C2 | 2019-01-01 | 2019-02-01 |
| N2 | C2 | 2018-01-01 | 2018-02-01 |
NULL 表示学生没有完成课程。我想访问每门课程中每个学生的最新尝试。的输出
SELECT studentName, Course, MAX(startDate), MAX(finishDate)
FROM Tab1
GROUP BY studentName, Course
是:
| studentName | Course | startDate | finishDate |
|---|---|---|---|
| N1 | C1 | 2020-01-01 | 2019-02-01 |
| N2 | C1 | 2020-01-01 | 2020-02-01 |
| N2 | C2 | 2020-01-01 | 2019-02-01 |
这不是正确的输出,因为N1 <-> C1 和N2 <-> C2 组合应该有NULL。如何在保留NULL 的同时保留MAX(finishDate)?
谢谢。
【问题讨论】:
-
从你的样本数据中不是很清楚你想要什么输出。你能显示,形成你的样本数据,输出应该是什么?对于 N2 C1 的组合,它是否算作完成,因为有更高的开始日期和结束日期,还是应该报告 NULL?
-
@DaleK 完成!谢谢提醒。
-
这能回答你的问题吗? Get top 1 row of each group
-
@Charlieface 我认为我的问题有所不同。在群组中使用
MAX(.)时,我有兴趣保留NULL。 -
完全没有区别。这就是“每组前 1 名”的意思,每组获得第一行。那里的最佳答案使用
row_number(),就像这里的答案一样
标签: sql sql-server tsql group-by max