查找重叠和重复时间所花费的总时间

问题描述 投票:0回答:1

我有一个表,其中相同的 ID 可以有多个带有开始时间和结束时间的条目。我如何计算ID花费的总时间。我想要的下表结果是 11 分钟。

身份证 开始时间 结束时间
123 5:30:00 5:35:00
123 5:36:00 5:40:00
123 5:36:00 5:40:00
123 5:36:00 5:39:00
123 5:38:00 5:42:00

我尝试了一些方法,但我只能处理开始时间相同而不是重叠的情况。

sql postgresql
1个回答
1
投票

假设开始和停止时间的类型为

timestamp with time zone
并且表格名为
times
,您可以使用多范围魔法和日期算术来找到答案:

SELECT m.id, sum(upper(r.r) - lower(r.r)) AS duration
FROM (SELECT id,
             range_agg(tstzrange(start_time, end_time)) AS mr
      FROM times
      GROUP BY id) AS m
   CROSS JOIN LATERAL unnest(m.mr) AS r(r)
GROUP BY m.id;
© www.soinside.com 2019 - 2024. All rights reserved.