MS SQL 同一Date和Time下存在Try=2时优先选取对应行的实现方法
实现思路
- 核心逻辑是对相同
Date、Time组合的行按Try值降序排序,取每组排序第一的行即可满足优先取Try=2、无则取Try=1的需求,这里用MS SQL内置的ROW_NUMBER()窗口函数即可实现分组排序。
完整实现代码
SELECT Date, Time, Number FROM ( SELECT Date, Time, Number, Try, -- 按Date+Time分组,组内按Try降序排序,2会排在1前面 ROW_NUMBER() OVER (PARTITION BY Date, Time ORDER BY Try DESC) AS rn FROM DB1 WHERE Date >= {ts '2021-01-26 00:00:00'} ) t WHERE rn = 1 -- 取每组第一条 ORDER BY Date, Time
补充说明
- 该写法天然支持同
Date、Time下出现超过2条Try值的场景,默认取Try值最大的记录,无需额外调整逻辑 - 如果需要保留
Try字段用于校验,仅需在最外层SELECT语句中增加Try字段即可
内容的提问来源于stack exchange,提问作者fluervion
相关产品推荐
相关产品推荐

