sql - 如何通过将下一行的值与前一个值进行比较来找到下一行的值?
问题描述
我有下表:
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 以找到绿灯的时间,但我很难确定红灯后发生的绿灯时间。
解决方案
您可以使用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';
推荐阅读
- datetime - Coldfusion 2021 日期时间的奇怪问题,因为它显示了 java 转储
- javascript - 有没有办法在每个 X 时间帧内将 readStream 限制为 N 行?
- javascript - 调整包含文本和 html 的 div 内仅文本的字体大小
- powershell - 如何使用 Where-Object 过滤输出?
- flutter - 颤振:自定义形状作为文本背景
- python - Python zip():检查哪个迭代器用尽了
- r - 用 R 插值地球化学数据中的缺失值 (NA)
- postgresql - 这个 postgresql 函数有什么问题
- angular8 - Angular Slick Grid Hierarchy 视图:需要从父行中删除图标
- next.js - 如何修复:无法在未安装的组件 Next.js || 上执行 React 状态更新 onScroll 事件