我需要能够计算两个时间戳之间的持续时间(以秒为单位)作为时间序列的聚合,如果它为空,则使用默认的 end_datetime。
想象一下,当您进出时,您有一个类似打孔卡的东西:username, start_datetime, end_datetime
我想要的是最后 N 分钟的生成时间序列,其中包含在该时间范围内重叠的所有用户的持续时间。因此,它将是 SUM(end_datetime - start_datetime),如果它为空,您将在其中 COALESCE 一个默认的 end_datetime。
所以我认为我需要的基本部分是:
生成时间间隔:
select TIMESTAMP '2013-01-01 12:01:00' - (interval '1' minute * generate_series(0,5)) as timestamps;
合并一个默认的 end_datetime
COALESCE(end_datetime, NOW())
找出开始日期和结束日期之间的秒差
因此,如果一个用户在 11:56:50 登录,现在是 12:01:40,我们应该得到如下表:
timestamps duration
-------------------------------------
2013-01-01 12:01:00 40
2013-01-01 12:00:00 60
2013-01-01 11:59:00 60
2013-01-01 11:58:00 60
2013-01-01 11:57:00 60
2013-01-01 11:56:00 10