【问题标题】:compute time difference between rows and conditional group by using PostgreSQL使用 PostgreSQL 计算行和条件组之间的时间差
【发布时间】:2020-09-07 14:00:17
【问题描述】:

我有如下数据:

+-------+-------+
| index | time  |
+-------+-------+
|     1 | 09.00 |
|     2 | 09.02 |
|     3 | 09.03 |
|     4 | 09.05 |
|     5 | 09.11 |
|     6 | 09.12 |
|     7 | 09.15 |
|     8 | 09.22 |
|     9 | 09.33 |
+-------+-------+

如果行之间的时间差

+-------+-------+
| index | time  |
+-------+-------+
|     1 | 09.00 |
|     1 | 09.02 |
|     1 | 09.03 |
|     1 | 09.05 |
|     2 | 09.11 |
|     2 | 09.12 |
|     2 | 09.15 |
|     3 | 09.22 |
|     4 | 09.33 |
+-------+-------+

我正在尝试类似下面的东西

    select index, (lag_time - time) from (
    select 
        index, 
        time,
        LAG(time,1) OVER (
            ORDER BY time
        ) lag_time) A

【问题讨论】:

    标签: sql postgresql datetime group-by lag


    【解决方案1】:

    你只需要一个累积和:

    select t.*,
           count(*) filter (where prev_time < time - interval '5 minute') over (order by time) as index
    from (select t.*,
                 lag(time) over (order by time) as prev_time
          from t
         ) t;
    

    Here 是一个 dbfiddle。

    【讨论】:

    • 这个查询有错误..column "t.index" must appear in the GROUP BY clause or be used in an aggregate function
    • @TheGreat 。 . .我不明白这个错误。这是一个窗口函数,不需要聚合。
    • Lindoff - 你可以在这里参考数据库dbfiddle.uk/…
    • @TheGreat 。 . .这不是这个答案中的查询。您缺少 over 子句。我在答案中添加了一个小提琴。
    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 2021-06-25
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多