sql - Oracle SQL 返回第一个差异
解决方案
横向连接可能是最简单的解决方案:
select t.*,
t2.date as lastchangedate,
t2.value as lastvalue
from t left join lateral
(select t2.*
from t t2
where t2.date < t.date and
t2.value <> t.value
order by t2.date desc
fetch first row only
) t2
on 1=1;
另一种方法使用窗口函数。一种方法是用于lag()
确定值何时更改,然后将其传播到行组中:
select t.*,
last_value(case when prev_value <> value then prev_value end ignore nulls) over (order by date)
from (select t.*,
lag(value) over (order by date) as prev_value
from t
) t;
这是一个 db<>fiddle。
推荐阅读
- sql - 为什么聚集索引可以防止死锁?
- r - 在 R 中复制后,从列表中的列表中 bbind
- usb - HID 电源设备规格示例未指示值
- python - 如何遍历字典值并且如果没有值是空的,则只传递一次?
- python - on_member_join 事件 discord.py
- rust - Rustlang book 14.3 - 错误[E0425]:在板条箱`add_one`中找不到函数`add_one`
- python - 在 python 中使用 pyodbc 尝试并捕获异常未按预期工作
- python - 输入字符串而不是int时如何显示消息?
- node.js - 如何在 mongoDB 中用一个请求更新 2 个集合?
- html - 从 web html 上显示的 postgreSQL 数据库获取数据节点 js 时出错