使用postgresql计算跨多个记录的两个时间戳之间的总分钟数

时间:2014-01-19 22:54:51

标签: sql postgresql

我有一个带有2个时间戳的postgresql 9.1表,记录可能重叠的时间段。例如:

ID   Start                     End
1    2014-01-19 21:14:59+00    2014-01-19 21:30:00+00
1    2014-01-19 21:16:29+00    2014-01-19 21:31:30+00
2    2014-01-19 21:19:29+00    2014-01-19 21:40:30+00
2    2014-01-19 21:29:59+00    2014-01-19 21:45:00+00

我需要获得这些行中每个ID的所有分钟数的总和,确保时间不会重复计算,因此输出将是:

ID   Hour      Total Minutes
1    21        n
2    21        n

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

每组只有两行,您可以使用强力进行计算。在两个时期中一直加起来。然后减去重叠,如果有的话:

select id,
       (sum(extract(epoch from end - start)) -
        (case when max(start) < min(end)
              then extract(epoch from max(start) - min(end))
              else 0
         end)
        ) / 60
from timeperiods tp
group by id;

如果您有多行,解决方案会更难。如果那是你的问题,那就发布另一个问题。