繁体   English   中英

MySQL - 从前一行减去值,按 2 个字段分组

[英]MySQL - Subtracting value from previous row, group by 2 fields

我有以下数据集: 1我想从同一天的同一列的前一行中减去“流量”列值。 如果同一天有更多条目从同一天的最后一个条目中减去第一个条目 这是我需要的结果: 2有一个自动增量 id

可以这样做:

SELECT
    t.myMax,
    t.`insertat`,
    IF(t.myMin = t.myMax, t1.myval, t2.`myval` - t1.`myval`) AS newval
FROM (
    SELECT insertat, min(id) AS myMin, max(id) AS myMax
    FROM myTable
    GROUP BY insertat) AS t
LEFT JOIN myTable  t1 ON t1.id = t.myMin
LEFT JOIN myTable  t2 ON t2.id = t.myMax;

样本

MariaDB [bernd]> SELECT * FROM myTable;
+----+------------+-------+
| id | insertat   | myval |
+----+------------+-------+
|  1 | 2021-01-01 |    44 |
|  2 | 2021-01-02 |    99 |
|  3 | 2021-01-02 |   134 |
|  4 | 2021-01-03 |    45 |
|  5 | 2021-01-04 |     2 |
|  6 | 2021-01-04 |    17 |
+----+------------+-------+
6 rows in set (0.01 sec)

MariaDB [bernd]> 
MariaDB [bernd]> SELECT
    -> t.myMax,
    -> t.`insertat`,
    -> IF(t.myMin = t.myMax, t1.myval, t2.`myval` - t1.`myval`) AS newval
    -> FROM (
    -> SELECT insertat, min(id) AS myMin, max(id) AS myMax
    -> FROM myTable
    -> GROUP BY insertat) AS t
    -> LEFT JOIN myTable  t1 ON t1.id = t.myMin
    -> LEFT JOIN myTable  t2 ON t2.id = t.myMax;
+-------+------------+--------+
| myMax | insertat   | newval |
+-------+------------+--------+
|     1 | 2021-01-01 |     44 |
|     3 | 2021-01-02 |     35 |
|     4 | 2021-01-03 |     45 |
|     6 | 2021-01-04 |     15 |
+-------+------------+--------+
4 rows in set (0.03 sec)

MariaDB [bernd]> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM