从postgres中的时间戳中识别工作间隔



我正试图确定;工作会议";基于Postgres中存储的带有时间戳的记录。这在javascript/python/go等中相当容易,但我想在postgresql中完成。

如果第一个记录是在晚上10点,并且每小时至少有一次记录,直到凌晨4点,然后间隔10个小时,然后是另一组记录,我想把晚上10点到凌晨4点的记录分组到一个桶里,把下午4点到10个小时的记录分组,只要间隔多个小时,就分组到另一个桶。

检测";间隙";定义要用SQL编写的bucket边界?没有固定的";开始时间";或";停止时间";。

一些示例记录

{'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'}

在上述记录中,一个bucket为2021-05-05 22:00:05-2021-05-06 00:36:22因为到下一个记录的间隔大于N小时。

以下是我最终要做的事情。我使用Postgres滞后函数将按时间排序的记录与最后一条记录进行比较,然后计算两条记录之间的差距。如果间隙大于X,那么它就是一个新的bucket。

基于谷歌搜索";间隙和岛";如@AdamKG 所建议

最新更新