繁体   English   中英

有条件地重置row_number

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM