如何在没有滞后的情况下获得后续行之间的差异

how to get diff between subsequent rows without lag

我有

id value
1 12
1 15
1 17
1 22
1 22
1 23

我需要这样

id  value
1 --
1 3
1 2
1 5
1 0
1 1

你能告诉我,如何实现这个吗?

你可以试试下面的-

select id, 
      value-max(value) over(order by id rows between 1 preceding and 1 preceding) as value
from tablename

您似乎想要 lag(),我猜这是根据 id 并基于 value:

的顺序
select t.*,
       (value - lag(value) over (partition by id order by value)) as diff
from t
order by value;

就是说,您的示例数据具有完全相同的重复项。这在 SQL table.

中是不寻常的