计算之前和当前记录之间的差异

问题描述 投票:0回答:4

如何计算当前记录与上一个记录之间的差异。

这是表格示例

| 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。如何找出差异?

mysql
4个回答
2
投票

您可以使用

LAG()
函数让您知道上一条记录的值。

就你而言,

lag(data, 1) over (order by time) as previou_val

会显示之前的数据!


0
投票

确保表中有差异列。然后,每当您使用新值更新表时,请执行此操作

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';

已测试且有效

演示


0
投票
SELECT
    rid,
    `time`,
    data,
    data - (LAG(data, 1) OVER(ORDER BY `time` ASC)) AS DIf
FROM your_example_table;

-2
投票

您可以使用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
 } 
© www.soinside.com 2019 - 2024. All rights reserved.