如何解决如何通过引用SQL中的日期和状态进行排名
customer product status surrender_date
-------------------------------------------
A a invalid 2020/8/1
A b invalid 2020/9/1
A c valid null
B a invalid 2020/7/1
B b valid null
B c valid null
首先,我想按客户分组:
customer product status surrender_date
-------------------------------------------
A a invalid 2020/8/1
A b invalid 2020/9/1
A c valid null
第二,rank
将通过引用其surrender_date
和status
添加,日期越新,排名越高。
另一方面,如果status = valid
,排名将始终为1
。
customer product status surrender_date rank
--------------------------------------------------
A a invalid 2020/8/1 3
A b invalid 2020/9/1 2
A c valid null 1
因此,我想要的结果如下:
customer product status surrender_date rank
--------------------------------------------------
A a invalid 2020/8/1 3
A b invalid 2020/9/1 2
A c valid null 1
B a invalid 2020/7/1 3
B b valid null 1
B c valid null 1
我的尝试不能包含valid
状态。
select
t.*,rank() over(partition by customer order by surrender_date desc) rank
from
mytable
如果有人有意见,请告诉我。
谢谢
解决方法
请考虑向窗口函数的order by
子句添加另一个条件,该子句将“有效”状态放在第一位:
select
t.*,rank() over(
partition by customer
order by case when status = 'valid' then 0 else 1 end,surrender_date desc
) rn
from mytable
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。