我有一个带有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;
如果您有多行,则解决方案会更困难。如果这是您的问题,请发布另一个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句