【发布时间】:2021-08-10 14:58:28
【问题描述】:
我想找出每个id 的两个时间戳之间的时间差。
计算时,只需要计算9am 到 17pm和工作日。
例如第一条记录必须从2021-05-19的9am开始计算,因此结果为45分钟。 第二条记录为330分钟,计算如下:
TIMESTAMPDIFF('minute', '2021-05-19 15:30:00'::timestamp, '2021-05-19 17:00:00'::timestamp) +
TIMESTAMPDIFF('minute', '2021-05-20 09:00:00'::timestamp, '2021-05-20 13:00:00'::timestamp)
这里是示例数据:
WITH t1 AS (
SELECT 'A' AS id, '2021-05-18 18:30:00'::timestamp AS started_at, '2021-05-19 09:45:00'::timestamp AS ended_at UNION ALL
SELECT 'B' AS id, '2021-05-19 15:30:00'::timestamp AS started_at, '2021-05-20 13:00:00'::timestamp AS ended_at
)
SELECT *
FROM t1
【问题讨论】:
-
您想如何处理部分时间?如果你的创建时间是 16:15,而你的完成时间是第二天 09:45,结果应该是什么,为什么?您可能需要编写一个函数,该函数将遍历开始日期和结束日期之间的所有时间,并应用逻辑是否将该时间包括在您的总计数中
-
@NickW 为了简单起见,我只是在 TIMESTAMPDIFF 中使用了小时。对于部分小时,我会改用分钟。我使用 tstzrange 在 Postgres 中创建营业时间范围。 Snowflake中是否有类似的功能?该解决方案从这里开始工作。 stackoverflow.com/questions/67194137/…
标签: sql date time-series snowflake-cloud-data-platform date-range