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

查询以查找Mysql中连续行之间的差异
EN

Stack Overflow用户
提问于 2012-03-14 14:09:53
回答 2查看 10.9K关注 0票数 8

由于我是MySQL的新手,这个问题可能很愚蠢。如何找出连续行之间的差异?

示例:

表(tableName='Abc')包含单行,如下所示,

代码语言:javascript
复制
|DATA|
|10  |
|20  |
|30  |
|40  |
|50  |

在这里,我想要得到输出,

代码语言:javascript
复制
|Dif|
|10 |
|10 |
|10 |
|10 |

如何在没有任何索引(主索引或Auto_increment索引)的情况下找到这样的差异?

EN

回答 2

Stack Overflow用户

发布于 2012-03-14 14:20:29

自联接是比较连续行的一种方式:

代码语言:javascript
复制
SELECT
    MIN(T2.DATA - T1.DATA) AS Dif
FROM
    Abc T1 INNER JOIN Abc T2 on T1.DATA < T2.DATA
ORDER BY
    T1.DATA
票数 9
EN

Stack Overflow用户

发布于 2012-03-14 14:17:53

最好是在数据库之外通过跟踪前一行来执行此操作。下面是一些代码(希望我的php不会太生疏):

代码语言:javascript
复制
<?php

$prevNum = 0;

$db = mysql_connect(...); // fill in connection string

mysql_select_db("my_db", $db);

$result = mysql_query("select DATA from Abc order by DATA");

while ($row = mysql_fetch_array($result)) {

    $diff = $row[0] - $prevNum;

    echo "$diff\n";

    $prevNum = $row[0];

}

?>

如果出于某种原因,您需要在数据库中执行此操作,那么最好创建一个存储过程,该存储过程基本上执行相同的操作:实例化一个值为0的变量,报告每行和该变量的差异,然后将变量设置为行值。

按照John Pick的说明进行编辑,以添加order by子句

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9696802

复制
相关文章

相似问题

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