如何解决如何获得连续日期和各种列值的排名查询
我得到以下输入:
state Date
success 01-01-2021
fail 03-01-2021
success 05-01-2021
success 06-01-2021
fail 07-01-2021
fail 09-01-2021
我想得到一个排名查询或者 row_number 查询,它确实考虑了状态和连续日期,即:
state Date rank
success 01-01-2021 1
fail 03-01-2021 2
success 05-01-2021 3
success 06-01-2021 3
fail 07-01-2021 4
fail 09-01-2021 5
我很想听听一些想法,因为在过去的一个小时里我一直在努力让类似的东西工作。显然也欢迎采用不同方法的相同结果!
解决方法
我相信,如果您只是使用 LAG() 函数并比较 State 和 Date,您应该能够得到您想要的结果。但是您必须按照上面的说明修改您的日期,因为它们看起来像是一个月的第一天,而不是连续的几天。
请考虑:
SELECT State,Date,SUM(CASE WHEN DATEDIFF(Date,PrevDate) = -1 AND State = PrevState THEN 0 ELSE 1 END) OVER(ORDER BY Date)
FROM
(
SELECT *,LAG(Date,1,Date) OVER(ORDER BY Date) PrevDate,LAG(State,State) OVER(ORDER BY Date) PrevState from T
) T2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。