【问题标题】:SQL: Differences between times and counting the frequencySQL:时间和计算频率之间的差异
【发布时间】:2017-08-31 08:02:06
【问题描述】:

我有以下按事件、ID 和 start_time 排序的数据:

EVENT  ID   START_TIME  END_TIME
1      101     1:00      2:00
1      101     3:00      3:30
1      102     1:00      4:00
1      102     5:00      6:00
2      103     10:00     11:00
2      103     12:00     13:00
2      103     13:30     14:00
2      103     14:30     15:00

我想得到以下结果:

Difference_hour Frequency
1                  3
0,5                2

我想获得一个查询,查看同一事件中同一 ID 的 END_TIME 和同一 ID 的 START_TIME 之间的差异(具体来说,我对 START_TIME 和 END_TIME 之间的差异不感兴趣同一行)。

示例:在事件 1 中,我们必须 ID 为 101,我想知道第一个 END_TIME (2:00) 和第二行 3:00 上的以下 START_TIME 之间的差异。相差1小时。如果我们对 ID 102 执行类似的操作,我们最终会得到另一个 1 小时的差异。

最后,我想统计一下每个差异出现的频率,可以在第二张表中看到。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:
    select diff_hour, count(*)
    from
      (
      select (next_start - end_time)*86400 as diff_hour
      from
        (
        select end_time, lead(start_time) over (partition by event, id order by start_time) next_start
        from MyTable
        ) x1
      where next_start is not null
      ) x2
    group by diff_hour
    

    【讨论】:

    • 您好约翰,感谢您的快速回复!它似乎运作良好,我只是有一个不同的时间,包括日期,我希望因为它没有显示正确的时间。包括日期在内的时间以如下方式呈现:。这个日期的查询看起来如何?示例:当 END_TIME 和 START_TIME 时,我想以小时为单位,即 0.0519444444 小时。提前致谢!
    • @Younes Oracle 没有“时间”类型,它只使用日期。要在 HH:MM 中显示,您需要将其转换为文本。
    • 嗨,John,我成功了,再次感谢您的快速帮助,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多