我有一个表,其中相同的 ID 可以有多个带有开始时间和结束时间的条目。我如何计算ID花费的总时间。我想要的下表结果是 11 分钟。
ID | 开始时间 | 时间结束 |
---|---|---|
123 | 5:30:00 | 5:35:00 |
123 | 5:36:00 | 5:40:00 |
123 | 5:36:00 | 5:40:00 |
123 | 5:36:00 | 5:39:00 |
123 | 5:38:00 | 5:42:00 |
我尝试了一些方法,但只能处理开始时间相同而不重叠的情况。
我有一个表,其中相同的 ID 可以有多个带有开始时间和结束时间的条目。我如何计算ID花费的总时间。我想要的下表结果是 11 分钟。
ID | 开始时间 | 时间结束 |
---|---|---|
123 | 5:30:00 | 5:35:00 |
123 | 5:36:00 | 5:40:00 |
123 | 5:36:00 | 5:40:00 |
123 | 5:36:00 | 5:39:00 |
123 | 5:38:00 | 5:42:00 |
我尝试了一些方法,但只能处理开始时间相同而不重叠的情况。
假设开始时间和停止时间的类型为
timestamp with time zone
,并且该表名为times
,您可以使用多范围魔法和日期算术来找到答案:使用 LAG() Over() 分析函数处理重叠并计算以秒为单位的总差(如果需要,稍后将其转换为小时、分钟、秒):
使用https://dba.stackexchange.com/questions/270952/how-to-get-non-overlapping-distinct-intervals-from-a-postgresql-table中的指令
我应用了您的示例(公开 id,用 StartTime 替换 f_time,用 EndTime 替换 l_time)
小提琴
不重叠的不同区间:
全部的: