sql - MySQL用之前的字段减去字段
问题描述
我想在每个值处从当前值之前的行中减去两个值,即当前值和值,基本上创建一个只有这些新值的新表,以便我可以后期平均它们。
表结构如下所示:
-----------------------
id | keyTime | millis|
------------------------
1 | 22:00:00 | 10 |
2 | 22:05:00 | 20 |
3 | 22:10:00 | 30 |
4 | 22:15:00 | 40 |
我想像这样减去:
id | dif |
-------------
1 | 10-0 |
2 | 20-10 |
3 | 30-20 |
4 | 40-30 |
解决方案
您可以使用相关子查询:
select t.*, (millis - coalesce(prev_millis, 0)) as diff
from (select t.*,
(select t2.millis
from t t2
where t2.keyTime < t.keyTime
order by t2.keyTime desc
limit 1
) as prev_millis
from t
) t;
这假设id
是不可靠的。使用id
您显示的值,您可以简单地使用left join
.
推荐阅读
- telegram - 关于电报隐私的一般问题
- sql - 如何在函数内部创建一个不能从外部查看的表?
- c++ - C ++中“Class1 :: Class2”的含义是什么?
- python - 如何转换存储在 pandas 数据框中的图像(numpy 数组)的数据类型?
- c# - C# 获取文件大小
- terraform - 尝试在 terraform 中运行多个区域时出现重复错误
- powershell - 将网络接口移动到“域网络”
- python-3.x - 将列表更改为普通字符串 [Python3]
- reactjs - 在 MERN 反应中,我如何将 JSON 数据从一个组件发送到另一个组件以及如何获取它
- regex - 使用正则表达式解析 lspci 树