创建分组依据并显示序列号?

时间:2019-10-03 21:29:02

标签: sql sql-server

我试图了解是否可以创建一个满足以下要求的SQL查询。转动这张桌子:

enter image description here

对此:

enter image description here

技巧或挑战是使用事件类型时间戳的时间顺序获得周期的顺序。我尝试过将ORDER BY与COUNT(*)进行不同的组合,但没有获得任何成功。可以使用SQL来实现吗?我们欢迎任何可以引导我走上正确道路的帮助。

2 个答案:

答案 0 :(得分:2)

我注意到您是根据event_type的前六个字符重新开始的。因此,您需要partition by

select t.*
       row_number() over (partition by left(event_type, 6) order by timestamp) as cycle_id
from t;

编辑:

如果您的编号基于月份:

select t.*
       row_number() over (partition by year(timestamp), month(timestamp) order by timestamp) as cycle_id
from t;

答案 1 :(得分:0)

对于您发布的示例数据,我认为所需的分组是下划线前EventType列的一部分:

select 
  *,
  row_number() over (
    partition by left([Event Type], charindex('_', [Event Type]) - 1) 
    order by [TimeStamp])
  ) [Cycle Id]
from tablename