我有一个带有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
任何帮助表示感谢。
答案 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;
如果您有多行,解决方案会更难。如果那是你的问题,那就发布另一个问题。