MS SQL查询:按规则获取每位学生对应的唯一学习资格记录
MS SQL 学生学习资格单条记录查询实现
你可以通过ROW_NUMBER()窗口函数实现需求,该写法性能优异,可完美匹配你提出的3条筛选规则,具体查询代码如下:
WITH RankedEntitlements AS ( SELECT studentId, studentName, entitlementId, entitlementEndDate, ROW_NUMBER() OVER ( PARTITION BY studentId ORDER BY entitlementEndDate DESC, entitlementId DESC ) AS row_rank FROM -- 此处替换为你的实际表名 student_entitlement ) SELECT studentId, studentName, entitlementId, entitlementEndDate FROM RankedEntitlements WHERE row_rank = 1
规则匹配说明
- 学生仅存在1条资格记录时,
row_rank值默认为1,直接返回该记录,满足规则1 - 学生有多条记录时,排序逻辑优先按
entitlementEndDate倒序,最远到期时间的记录排在第一位,满足规则2 - 多条记录到期时间同为最大值时,次级排序按
entitlementId倒序,id最大的记录排在第一位,满足规则3
示例数据验证
针对你给出的示例数据,该查询返回结果如下,完全匹配预期:
| studentId | studentName | entitlementId | entitlementEndDate |
|---|---|---|---|
| 100 | Aaron A | 200600 | 2021-12-31 |
| 200 | Charlie C | 400900 | 2022-01-31 |
| 300 | Frank F | 500100 | 2022-09-31 |
如果你的表数据量较大,建议在studentId、entitlementEndDate、entitlementId三个字段上建立联合覆盖索引,可进一步提升查询性能。
内容的提问来源于stack exchange,提问作者AGW
相关产品推荐
相关产品推荐

