postgresql - 查找日期范围Postgres之间的差距

标签 postgresql gaps-and-islands

我有这张表,需要找出间隔之间的差距

记录可能重叠。

user |    start_time            |     end_time
user1|2018-09-26T02:16:52.023453|2018-09-26T03:12:04.404477
user1|2018-09-25T22:15:49.593296|2018-09-26T00:15:52.016497
user1|2018-09-25T20:13:02.358192|2018-09-25T22:15:49.593296

预期输出将是

 user |    start_time            |     end_time
 user1|2018-09-26T00:15:52.016497|2018-09-26T02:16:52.023453

最佳答案

demo: db<>fiddle

您可以使用 lag 窗口函数 ( https://www.postgresql.org/docs/current/static/tutorial-window.html )。此函数将值从前一行移动到当前行。现在可以将移动 end_time 与当前 start_time 进行比较并检查差距。

SELECT
    "user",
    prev_end_time as gap_start_time,
    start_time as gap_end_time
FROM (
    SELECT 
        *, 
        lag(end_time) OVER (PARTITION BY "user" ORDER BY start_time) as prev_end_time
    FROM time_intervals 
    ORDER BY start_time
) s
WHERE start_time > prev_end_time

结果

user    gap_start_time               gap_end_time
user1   2018-09-26 00:15:52.016497   2018-09-26 02:16:52.023453

请注意,“user”在 Postgres 中是一个保留字。您最好使用其他列名。

关于postgresql - 查找日期范围Postgres之间的差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52586602/

相关文章:

sql - 计算值大于 x 的时间(以分钟为单位)

sql - 重叠时间间隔 : Select "all busy" periods

database - 使用 PostgreSQL 的审计数据库插件

在 postgresql 中创建扩展测试

python - 切换到 Postgres 时 Django 加载数据中的 IntegrityError

sql - Django 中的复杂排序

c# - 哪个 IsolationLevel 最适合在 TransactionScope 中成功处理我在 C# 中的数据?

mariadb - SQL - 压缩具有连续 ID 的行

sql - Postgres : select query with group by clause on a range of dates

SQL Server 2008 R2 - 孤岛和差距