由于我是MySQL的新手,这个问题可能很愚蠢。如何找出连续行之间的差异?
示例:
表(tableName='Abc')包含单行,如下所示,
|DATA|
|10 |
|20 |
|30 |
|40 |
|50 |在这里,我想要得到输出,
|Dif|
|10 |
|10 |
|10 |
|10 |如何在没有任何索引(主索引或Auto_increment索引)的情况下找到这样的差异?
发布于 2012-03-14 14:20:29
自联接是比较连续行的一种方式:
SELECT
MIN(T2.DATA - T1.DATA) AS Dif
FROM
Abc T1 INNER JOIN Abc T2 on T1.DATA < T2.DATA
ORDER BY
T1.DATA发布于 2012-03-14 14:17:53
最好是在数据库之外通过跟踪前一行来执行此操作。下面是一些代码(希望我的php不会太生疏):
<?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子句
https://stackoverflow.com/questions/9696802
复制相似问题