我使用以下代码添加间隔。但如果时间不在同一天,它似乎就不起作用。
例如,开始=23:00,结束=01:00
代码
SELECT extract(epoch from SUM(end - start)::interval) FROM table GROUP BY column
问题
如果我加上:end=01:00,start=23:00,那么它会在和中加上一个负数和false。因为01:00-23:00是-22:00。但是,正确的结果应该是2:00,因为在23:01和01:00之间有两个小时。
您可以使用case
表达式。代替:
end - start
你会在负间隔上加上24小时,比如:
case when end >= start
then end - start
else (end - start) + interval '24 hour'
end
请注意,不需要将时间子动作的结果转换为间隔——它已经是了。
在您的查询中:
select col,
extract(epoch from sum(
case when end >= start
then end - start
else (end - start) + interval '24 hour'
end
)) as res
from mytable
group by col