首页 > 解决方案 > PostgreSQL与时间列的时间差(以分钟为单位)?

问题描述

我想使用 PostgreSQL(电话)以分钟为单位计算持续时间。

-- 08:54:55 和 08:56:10 之间的差异(仅时间)

SELECT DATE_PART('hour', '08:56:10'::time - '08:54:55'::time) * 60 + DATE_PART('minute', '08:56:10'::time - ' 08:54:55'::时间); -- 结果:1

如何修改它以适用于整个数据集?开始时间(只有小时和分钟,秒总是 00)和结束时间在同一列 Event_Time 中,按 Correlation_ID 分组。

Event_Time  Customer_ID Case_ID Event_ID    Correlation_ID  Line_ID Internal_ID
10:11:00            id1     1       start       sd34        l3      456
10:13:00            id5     8       stop        rt56        l3      456
10:15:00            id4     3       start       tg84        l7      567
10:17:00            id7     5       start       ty69        l4      678
10:21:00            id5     5       stop        rt56        l7      678
10:31:00            id1     1       stop        sd34        l4      567

我尝试了这个解决方案,但它只有在我指定时间http://www.sqllines.com/postgresql/how-to/datediff时才有效。

谢谢!

标签: postgresql

解决方案


也许有这样的自我加入:

SELECT
  start."Correlation_ID",
  extract(epoch from stop."Event_time" - start."Event_time")/60
FROM
  some_table AS start
JOIN
  some_table AS stop
  ON start."Correlation_ID"=finish."Correlation_ID"
  AND stop."Event_ID"='stop'
WHERE 
  start."Event_ID"='start'
;

或与这样的小组:

SELECT
  "Correlation_ID",
  extract(epoch from 
     max(CASE "Event_ID" WHEN 'stop' THEN "Event_time" END ) 
    -min(CASE "Event_ID" WHEN 'start' THEN "Event_time" END ) 
    ) /60
FROM
  some_table
JOIN
  grouP BY "Correlation_ID"
;

推荐阅读