首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql中连续行之间的差异

Mysql中连续行之间的差异
EN

Stack Overflow用户
提问于 2016-03-04 11:53:14
回答 2查看 1.8K关注 0票数 1

我想得到MySql中两个连续行之间的差值。我正在试着解决,但没有成功。以下是图像中的数据

我需要在"Data2“列和"Diff”列的结果行之间的差异。

感谢您的关注和帮助。

-Ram

EN

回答 2

Stack Overflow用户

发布于 2016-03-04 12:11:17

如果表有一个自动增量列' id ',我们可以按id排序,识别下一个行值并减去它

代码语言:javascript
复制
SELECT t1.*, t1.Data2-(SELECT t2.Data2 FROM  `table_name`  t2 WHERE t2.id > t1.id LIMIT 1 ) AS difference
FROM `table_name`  t1
ORDER BY t1.id

从下一行的值中减去

代码语言:javascript
复制
SELECT t1.*, t1.Data2-(SELECT t2.Data2 FROM  `table_name`  t2 WHERE t2.id < t1.id ORDER BY id DESC  LIMIT 1 ) AS difference
FROM `table_name`  t1
ORDER BY t1.id
票数 1
EN

Stack Overflow用户

发布于 2016-03-04 14:00:53

由于表中没有惟一的列,因此可以通过包含绑定变量@rn & @rn1来实现这一点,该变量按顺序向表中的每一行添加一个惟一的数字。

试试这个:

代码语言:javascript
复制
SELECT tab1.application_id, tab1.fiscal_year, tab1.data1, coalesce(cast(tab1.data2 as signed) - 
                cast(tab2.data2 as signed), tab1.data2) as diff
  FROM 
      (SELECT b.application_id, @rn1:=@rn1+1 AS rank, b.fiscal_year, b.data1, b.data2
         FROM your_table b, (SELECT @rn1:=0) t1) as tab1,
      (SELECT a.application_id, @rn:=@rn+1 AS rank, a.fiscal_year, a.data1, a.data2
         FROM your_table a, (SELECT @rn:=0) t2) as tab2
 WHERE tab1.rank = tab2.rank + 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35787660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档