【问题标题】:Need Query to get start and end timings of continous events需要查询以获取连续事件的开始和结束时间
【发布时间】:2021-09-17 20:02:44
【问题描述】:

我在表格中有如下数据。我需要查询来获取连续事件的开始和结束时间。

ID, Event,  Timestamp
1   Sleep   17-Sep-2021 05:22:01
2   Sleep   17-Sep-2021 05:22:02
3   Sleep   17-Sep-2021 05:22:03
4   Running 17-Sep-2021 05:22:04
5   Running 17-Sep-2021 05:22:05
6   Eating  17-Sep-2021 05:22:06
7   Eating  17-Sep-2021 05:22:07
9   Sleep   17-Sep-2021 05:22:08
10  Sleep   17-Sep-2021 05:22:09
11  Sleep   17-Sep-2021 05:22:10 

我需要如下输出。

Event      Start Time                  End Time
Sleep      17-Sep-2021 05:22:01        17-Sep-2021 05:22:03
Running    17-Sep-2021 05:22:04        17-Sep-2021 05:22:05
Eating     17-Sep-2021 05:22:06        17-Sep-2021 05:22:07
Sleep      17-Sep-2021 05:22:08        17-Sep-2021 05:22:10 

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    这是一种孤岛问题。在这种情况下,行号的差异可能是最简单的解决方案:

    select event, min(timestamp) as start_time, max(timestamp) as end_time
    from (select t.*,
                 row_number() over (order by timestamp) as seqnum,
                 row_number() over (partition by event order by timestamp) as seqnum_2
          from t
         ) t
    group by event, (seqnum - seqnum_2)
    order by min(timestamp);
    

    为什么这行得通有点难以解释。但是如果你看一下子查询的结果,你会发现在事件不变的情况下,两个序列号之间的差异是如何保持不变的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多