首页 > 解决方案 > 当 Rows 对应于其他列中的 MAX 时保持 NULL

问题描述

我在 SQL Server 中有GROUP BY/的情况。MAX(.)请考虑下表,Tab1以及每年重复的课程条目:

学生姓名 课程 开始日期 完成日期
N1 C1 2020-01-01 无效的
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 无效的
N2 C1 2018-01-01 2018-02-01
N2 C2 2020-01-01 无效的
N2 C2 2019-01-01 2019-02-01
N2 C2 2018-01-01 2018-02-01

ANULL表示学生没有完成课程。我想访问每门课程中每个学生的最新尝试。的输出

SELECT studentName, Course, MAX(startDate), MAX(finishDate)
FROM Tab1
GROUP BY studentName, Course

是:

学生姓名 课程 开始日期 完成日期
N1 C1 2020-01-01 2019-02-01
N2 C1 2020-01-01 2020-02-01
N2 C2 2020-01-01 2019-02-01

这不是正确的输出,因为应该有NULLforN1 <-> C1N2 <-> C2组合。我怎样才能MAX(finishDate)在保留的同时采取NULL

谢谢你。

标签: sqlsql-servertsqlgroup-bymax

解决方案


假设您想要每个学生和课程组合的最新开始日期的记录 - 一种方法是使用 row_number 函数。

像这样的东西:

;with student_select as (
SELECT 
    studentName
    , Course
    , startDate
    ,finishDate
    ,row_number() over (partition by studentName,Course order by startdate desc) as row_num

FROM Tab1 
)

Select 

    studentName
    , Course
    , startDate
    ,finishDate 

from student_select
where row_num = 1

在此处查看 SQL FIDDLE 示例:-http://www.sqlfiddle.com/#!18/9ad7f / 3


推荐阅读