SQL Server中如何查询每个Class ID对应的最小考试日期
SQL Server 分组取最小日期对应记录解决方案
- 以下示例默认分组字段为表中的
ID字段,如果你实际需要分组的是单独的Class ID字段,替换PARTITION BY和GROUP BY后的字段名即可。
方案1:窗口函数实现(推荐)
场景A:同分组下最小日期对应多条记录时全部保留
使用RANK()排名函数:
WITH RankedRecords AS ( SELECT ID, Date, Subject, RANK() OVER (PARTITION BY ID ORDER BY Date ASC) AS DateRank FROM 你的表名 ) SELECT ID, Date, Subject FROM RankedRecords WHERE DateRank = 1;
场景B:同分组下最小日期对应多条记录时仅保留1条
使用ROW_NUMBER()排名函数即可:
WITH RankedRecords AS ( SELECT ID, Date, Subject, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date ASC) AS DateRank FROM 你的表名 ) SELECT ID, Date, Subject FROM RankedRecords WHERE DateRank = 1;
方案2:子查询关联实现(适配低版本SQL Server)
如果使用的是不支持CTE语法的老旧SQL Server版本,可以用关联子查询实现,效果和RANK()一致,最小日期对应多条时全部返回:
SELECT t1.ID, t1.Date, t1.Subject FROM 你的表名 t1 INNER JOIN ( SELECT ID, MIN(Date) AS MinDate FROM 你的表名 GROUP BY ID ) t2 ON t1.ID = t2.ID AND t1.Date = t2.MinDate;
内容的提问来源于stack exchange,提问作者HITHERE
相关产品推荐
相关产品推荐

