首页 > 解决方案 > 如何通过将下一行的值与前一个值进行比较来找到下一行的值?

问题描述

我有下表:

ID | Light | TIME
1    Red     8:30
1    Red     9:05
1    Green   9:30
2    Red     7:21
2    Green   7:24
3..

我想在红灯发生后获得绿灯时间。例如:

ID | Time
1    9:30
2    7:24
...

我尝试在 tb1.id = tb2.id+1 上创建连接表 tb1 和 tb2 以找到绿灯的时间,但我很难确定红灯后发生的绿灯时间。

标签: sqljoinssms

解决方案


您可以使用lag()

select t.*
from (select t.*,
             lag(light) over (partition by id order by time) as prev_light
      from t
     ) t
where light <> 'Green' or prev_list <> 'Red';

推荐阅读