[英]Conditionally reset row_number
我想计算我的行按id分组,并按时间值排序,比如row_number() over(partition by id order by time)
。 但我想在遇到特殊情况时重置行数。
例如,在下表中,当event = 'y'
我想从1重新计算相同的id。
id time event rank
----------- ------------------------- ---------- ----------
400 2016-07-09 11:31:30 y 1
400 2016-07-09 11:31:31 x 2
400 2016-07-09 11:31:37 x 3
400 2016-07-09 11:31:38 x 4
400 2016-07-09 11:31:42 y 1
400 2016-07-09 11:31:43 x 2
400 2016-07-09 11:31:44 x 3
400 2016-07-09 11:31:59 y 1
400 2016-07-09 11:32:43 x 2
400 2016-07-09 11:33:44 x 3
401 2016-07-09 10:31:30 y 1
401 2016-07-09 10:31:31 x 2
401 2016-07-09 10:37:37 x 3
401 2016-07-09 10:38:38 x 4
401 2016-07-09 11:05:42 y 1
401 2016-07-09 11:07:43 x 2
401 2016-07-09 11:31:44 x 3
我尝试了很多查询,但没有任何接近我的期望。
你可以帮帮我吗? 谢谢你的帮助。
您可以使用条件累积和来按event
字段进一步对行进行分区:
with cte as (
select id, time, event,
sum(case when event = 'y' then 1 else 0 end) over (partition by id order by time) as group_id
from tbl
)
select id, time, event,
row_number() over (partition by id, group_id order by time) as rank
from cte
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.