如何计算当前记录与上一个记录之间的差异。
这是表格示例
| rid | time | data |
|10000038| 2012-03-13 12:30:18 | 100 |
|10000052| 2012-03-13 12:30:18 | 120 |
|10000053| 2012-03-13 12:30:18 | 140 |
|10000038| 2012-03-13 12:20:18 | 160 |
|10000052| 2012-03-13 12:20:18 | 180 |
|10000053| 2012-03-13 12:20:18 | 160 |
|10000038| 2012-03-13 12:10:18 | 100 |
|10000052| 2012-03-13 12:10:18 | 160 |
|10000053| 2012-03-13 12:10:18 | 160 |
在这里我希望得到的结果是,
| rid | time | data | DIf |
|10000038| 2012-03-13 12:30:18 | 100 | 0 |
|10000052| 2012-03-13 12:30:18 | 120 | 20 |
|10000053| 2012-03-13 12:30:18 | 140 | 20 |
|10000038| 2012-03-13 12:20:18 | 160 | 20 |
|10000052| 2012-03-13 12:20:18 | 180 | 20 |
|10000053| 2012-03-13 12:20:18 | 160 |-20 |
|10000038| 2012-03-13 12:10:18 | 100 |-60 |
|10000052| 2012-03-13 12:10:18 | 160 | 60 |
|10000053| 2012-03-13 12:10:18 | 160 | 0 |
注意:查看表,表中每次都会转储三个数据,并且具有单独的资源 id。如何找出差异?
您可以使用
LAG()
函数让您知道上一条记录的值。
就你而言,
lag(data, 1) over (order by time) as previou_val
会显示之前的数据!
确保表中有差异列。然后,每当您使用新值更新表时,请执行此操作
UPDATE
`tablename`
SET
data = 120,
diff = 120 -
(
SELECT prev_data
FROM (
SELECT data AS prev_data
FROM tablename
WHERE `id` = '1'
)
AS prev_data
)
WHERE
id='1';
SELECT
rid,
`time`,
data,
data - (LAG(data, 1) OVER(ORDER BY `time` ASC)) AS DIf
FROM your_example_table;
您可以使用PHP, 当您循环遍历结果集时, 将值保存在临时变量中。 假设您获得的数据是整数,则使用它与下一行进行比较。
$previousRow = 0; //initiates value for preceeding row
while($row = mysql_fetch_assoc($result)){
$currentRow = $row['data']; //gets current row
//gets difference between the two variables
$difference = $currentRow - $previousRow;
echo "\$difference = $difference<br>\n";
$previousRow = $currentRow; //reassigns previous row
//display otherfield
//display $diff
}