姓名 | 日期 | 小时 | 计数 |
---|---|---|---|
米尔斯 | 2022-07-17 | 23 | 12 |
米尔斯 | 2022-07-18 | 00 | 15 |
米尔斯 | 2022-07-18 | 01 | 20 |
米尔斯 | 2022-07-18 | 02 | 22 |
米尔斯 | 2022-07-18 | 03 | 25 |
米尔斯 | 2022-07-18 | 04 | 20 |
米尔斯 | 2022-07-18 | 05 | 22 |
米尔斯 | 2022-07-18 | 06 | 25 |
迈克 | 2022-07-18 | 00 | 15 |
迈克 | 2022-07-18 | 01 | 20 |
迈克 | 2022-07-18 | 02 | 22 |
迈克 | 2022-07-18 | 03 | 25 |
迈克 | 2022-07-18 | 04 | 20 |
我当前的输入表存储每天每小时连续记录的计数信息。我需要提取连续计数值的差异,但由于我被迫使用 MySQL 5.7,所以我很难做到这一点。
我编写的查询如下:
SET @cnt := 0; SELECT Name, Date, Hours, Count, (@cnt := @cnt - Count) AS DiffCount FROM Hourly ORDER BY Date;
这没有给出准确的结果。
我希望得到以下输出:
姓名 | 日期 | 小时 | 计数 | 差异 |
---|---|---|---|---|
米尔斯 | 2022-07-17 | 23 | 12 | 0 |
米尔斯 | 2022-07-18 | 00 | 15 | 3 |
米尔斯 | 2022-07-18 | 01 | 20 | 5 |
米尔斯 | 2022-07-18 | 02 | 22 | 2 |
米尔斯 | 2022-07-18 | 03 | 25 | 3 |
米尔斯 | 2022-07-18 | 04 | 20 | 5 |
米尔斯 | 2022-07-18 | 05 | 22 | 2 |
米尔斯 | 2022-07-18 | 06 | 25 | 3 |
迈克 | 2022-07-18 | 00 | 15 | 0 |
迈克 | 2022-07-18 | 01 | 20 | 5 |
迈克 | 2022-07-18 | 02 | 22 | 2 |
迈克 | 2022-07-18 | 03 | 25 | 3 |
迈克 | 2022-07-18 | 04 | 20 | 5 |
迈克 | 2022-07-18 | 05 | 22 | 2 |
迈克 | 2022-07-18 | 06 | 25 | 3 |
请提出我所缺少的内容。
尝试以下操作:
查看来自 db-fiddle 的演示。
在MySQL 5.7中,您可以内联更新变量,以包含更新后的“Count”值。由于当“Name”的值更改时,您需要重置变量,因此您可以使用包含先前“Name”值的另一个变量。然后使用
IF
函数检查:它将与
ABS
a> 函数,对差值应用绝对值。请在此处查看演示。
在MySQL 8.0中,您可以使用像
LAG
顺利获得输出。它将与:ABS
应用绝对值差异值,COALESCE
用于删除第一个空值。请在此处查看演示。