如何最好地总结交织行之间同一列中日期范围的差异?我有一个Datetime列,想计算行之间的差异。我想以秒为单位。这个问题不是关于如何获得两个时间戳之间的差异,而是更多地集中于如何最有效地计算同一表的行之间的差异。在我的情况下,每一行都有一个datetime偶数类型,该类型将两行逻辑地链接在一起。
详细信息与如何对开始和结束事件类型进行分组有关。(Andriy M的问题)“应该”是连续的开始和结束。如果起点没有后续终点,则应将其排除在总和之外。移至下一个“开始”以查看其是否结束。仅应将连续的开始-结束对添加到总秒数之和。
在PostgreSQL 9.x中工作...
表中的示例数据;
eventtype, eventdate
START, 2015-01-01 14:00
END, 2015-01-01 14:25
START, 2015-01-01 14:30
END, 2015-01-01 14:43
START, 2015-01-01 14:45
END, 2015-01-01 14:49
START, 2015-01-01 14:52
END, 2015-01-01 14:55
注意,所有开始日期和结束日期将是连续的。
这是我的第一次尝试。似乎正在工作。
SELECT
-- starts.*
SUM(EXTRACT(EPOCH FROM (eventdate_next - eventdate))) AS duration_seconds
FROM
(
WITH x AS (
SELECT *, dense_rank() OVER (ORDER BY eventdate) AS rnk
FROM table
AND eventdate > '2015-01-01 00:00:00.00'
AND eventdate < '2016-01-01 23:59:59.59'
)
SELECT x.eventdate, x.eventtype, y.eventdate AS eventdate_next, y.eventtype AS eventtype_next
FROM x
LEFT JOIN (SELECT DISTINCT eventdate, eventtype, rnk FROM x) y ON y.rnk = (x.rnk + 1)
ORDER BY x.eventdate
) starts
WHERE
eventtype = 'START'
GROUP BY eventtype
我的第一次尝试是基于stackoverflow Postgres 9.1的一个很好的例子 -获得下一个价值
注意; 您可以注释GROUP BY和SUM并取消注释起始点*,以获取记录在总和中的每个持续时间的记录。