首页 > 解决方案 > 如果未找到下一个值,则在第一次出现时存在最大日期和按状态排序

问题描述

我有一张如下表

ID,DATE,Status
359,2021-05-01,M
359,2021-05-01,R
359,2021-04-01,M
759,2021-05-01,R
759,2021-04-01,O
123,2021-05-01,M
123,2021-04-01,O
123,2021-03-31,U

我想要结果如下

359,2021-05-01,R
759,2021-05-01,R
123,2021-05-01,M

日期 - 最大/最晚日期

地位:

有人可以帮我吗?

提前致谢

标签: sqlsql-server

解决方案


一种方法是row_number()

select t.*
from (select t.*,
             row_number() over (partition by id order by case status when 'R' then 1 when 'M' then 2 when 'O' then 3 when 'U' then 4 else 5 end
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

如果你知道所有的状态,一个捷径是:

select t.*
from (select t.*,
             row_number() over (partition by id order by charindex('RMOU', status)) as seqnum
      from t
     ) t
where seqnum = 1;

推荐阅读