您可以使用生成小时数
generate_series()
. 然后使用
left join
和
aggregation
:
select g.ts, g.ts + interval '1 hour',
sum(extract(epoch from (least(g.ts + interval '1 hour', i.end_time) -
greatest(g.ts, i.start_time)
)
)
) / 60 as duration_in_minutes
from generate_series('2019-03-28 12:00:00'::timestamp, '2019-03-29 08:00 - 2019-03-29 09:00:00'::timestamp, interval '1 hour'
) g(ts) left join
input i
on i.start_time < g.ts + interval '1 hour' and
i.end_time > g.ts
group by g.ts
order by g.ts;
你的结果和你的问题都不清楚你想要什么时间。您明确表示“我想获得跨日期每小时的总利用时间。”但是,您的示例结果并非每小时都有。您可以使用
where
条款