mysql - 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
我想要的是第一个值自动为零。
解决方案
您可以默认使用:
value - lag(value, 1, value) OVER (ORDER BY datetime)
或使用coalesce()
:
coalesce(values - lag(value) OVER (ORDER BY datetime), 0)
推荐阅读
- android - 在普通函数中调用 .enqueue 还是在 kotlin 挂起函数中调用 .execute 更好?
- modx - 在 Modx 中获取 TV 的 html 属性中的值
- java - Android 相机预览在全屏上拉伸
- string - 如何将 nvarchar 从 T-SQL 方言转换为 hiveQL?
- tensorflow - 强制 TensorRT 在 CPU 上运行,还是将 trt 模型转换回 onnx?
- python - Pyspark:从特定值开始自动递增
- javascript - 在日期范围选择器中导航到新的月份或年份时,有没有办法设置默认日期?
- sql-server - 使用不带 null 的存储过程更新表
- java - 验证二叉搜索树
- vue.js - 在 v-for 循环中使用 v-bind 无法显示图像