使用postgresql计算跨多个记录的两个时间戳之间的总分钟数
我有一个带有2个时间戳的postgresql 9.1表,记录可能重叠的时间段。例如:使用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-
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。提供示例数据,并说明开始和结束时间戳之类的内容。我将这两个时间戳解释为两行。