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

使用postgresql计算跨多个记录的两个时间戳之间的总分钟数,sql,postgresql,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-

我有一个带有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

非常感谢您的帮助。

每组只有两行,您可以使用蛮力进行计算。把这两个时期的所有时间加起来。然后减去重叠部分(如有):

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;

如果有多行,则解决方案更难。如果这是您的问题,请发布另一个问题。

请给出所需输出的示例。这对sql/postgresql来说太难了吗?您好Gordon。每个ID和多个ID有许多行。当问题主题陈述“跨越多个记录”时,我应该如何改写问题?@Steve。提供示例数据,并说明开始和结束时间戳之类的内容。我将这两个时间戳解释为两行。