首页 > 解决方案 > SQL 中有没有一种方法可以将所有具有相同 ID 的“开始”到“结束”进程所花费的时间相加?

问题描述

SQL 中有没有一种方法可以计算相同 ID 的所有“开始”到“结束”进程所花费的时间?

id | b | timestamp
11| start | 1563794104895
11| intercepted | 1563794104898
11| end | 1563794104899
11| somethingelse | 1563794104999
11| start | 1563794105895
11| intercepted | 1563794106898
11| end | 1563794107899
12| start | 1563794104895
12| intercepted | 1563794104898
12| end | 1563794104899

标签: sql

解决方案


您可以使用lead(). 假设这些值正确交错:

select id, sum(next_timestamp - timestamp)
from (select t.*,
             lead(timestamp) over (partition by id order by timestamp) as next_timestamp
      from t
      where b in ('start', 'end')
     ) t
where b = 'start'
group by id;

推荐阅读