【发布时间】:2021-06-04 21:44:50
【问题描述】:
我正在尝试根据存储在 Postgres 中的时间戳记录来确定“工作会话”的持续时间。这在 javascript/python/go 等中相当容易,但我想在 postgresql 中完成。
如果第一条记录是在晚上 10 点,并且在凌晨 4 点之前每小时至少有一次记录,然后间隔 10 小时,然后是另一组记录,我想将晚上 10 点至凌晨 4 点的记录分组到一个存储桶中,并将下午 4 点的记录分组+10 小时 - 只要有另一个多小时的间隔,就进入另一个存储桶。
检测“间隙”以定义存储桶边界的逻辑如何用 SQL 编写?没有固定的“开始时间”或“停止时间”。
一些示例记录
{'2021-05-05 22:00:05', 'user1'},
{'2021-05-05 22:25:33', 'user1'},
{'2021-05-05 23:33:11', 'user1'},
{'2021-05-06 00:08:34', 'user1'},
{'2021-05-06 00:36:22', 'user1'},
{'2021-05-06 22:15:00', 'user1'},
{'2021-05-06 23:08:00', 'user1'},
{'2021-05-07 00:01:03', 'user1'}
在上述记录中,一个桶是从 2021-05-05 22:00:05 - 2021-05-06 00:36:22 因为到下一条记录的间隔超过N小时。
【问题讨论】:
-
没有时间回答 ATM 的完整答案,但请查找“差距和孤岛” - 这至少非常相似,可能只是其中的一个实例。
标签: postgresql group-by timestamp intervals