首页 > 解决方案 > SQL 查询 - 在时间序列的开头添加和更新值

问题描述

我正在处理一个名为Lecture的 SQL 表,其中包含以下数据:

datetime    value 
2019-01-01   20
2019-02-01   22
2019-03-01   25
2019-04-01   26
2019-05-01   28
2019-06-01   28

我曾经计算实现以下代码的值之间的差异:

select T1.datetime
     , case when T1.lag_value <0 then 0 else T1.lag_value end as lag_value
  from (select datetime, value - lag(value, 1, 0) OVER (ORDER BY datetime) lag_value 
from lecture) as T1;

结果如下:

datetime    value 
2019-01-01   20
2019-02-01   2
2019-03-01   3
2019-04-01   1
2019-05-01   2
2019-06-01   0

我想要的是第一个值自动为零。

标签: mysqlsql

解决方案


您可以默认使用:

value - lag(value, 1, value) OVER (ORDER BY datetime)

或使用coalesce()

coalesce(values - lag(value) OVER (ORDER BY datetime), 0)

推荐阅读