前言
执行sql
DROP TABLE IF EXISTS TMP;
CREATE TABLE TMP(
I INT PRIMARY KEY AUTO_INCREMENT,
V INT
);
INSERT INTO TMP(V) VALUES(1), (2), (3), (4);
则有如下表
mysql> select * from TMP;
+---+------+
| I | V |
+---+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+---+------+
4 rows in set (0.00 sec)
实现新增一列DIFF,表示当前V与上一行V的差值,ROW2-ROW1, ROW3-ROW2…,默认第0行V为0,则有
+---+------+------+
| I | V | DIFF |
+---+------+------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 4 | 4 | 1 |
+---+------+------+
方法一:左外连接自己
第一步,先和自己的上一行左外连接,并将上一行的V作为一个临时列V2
第二步,将V - V2
SELECT T.I I, T.V V, V - V2 DIFF
FROM (
SELECT A.I I, A.V V, IFNULL(B.V, 0) V2
FROM TMP A LEFT JOIN TMP B ON A.I = B.I + 1 ORDER BY A.I
) T;
方法二:通过变量实现
第一步,定义变量A.V初始值为0
第二步,将TMP查出来,将变量@A.V复制给V2,将当前V赋值给变量@A.V
第三步,将V-V2
SELECT T.I I, T.V V, V - V2 DIFF
FROM (
SELECT A.I AS I, A.V AS V, @A.V AS V2, @A.V:= A.V
FROM TMP A, (SELECT @A.V:=0) B
) T
若文章有误,或你有什么见解,欢迎留言指正和交流。
原创不易,若有所帮助,欢迎点赞、收藏。