如何获取mysql中的上一行? 例如我有数据:
serial........date..............value
xxx...........2016.01.03...3
xxx...........2016.01.02...2
xxx...........2016.01.01...1
yyy...........2016.01.03...3
yyy...........2016.01.02...2
yyy...........2016.01.01...1
我需要得到这个:
serial........date..............value..value_prev
xxx...........2016.01.03...3........2
xxx...........2016.01.02...2........1
xxx...........2016.01.01...1........null
yyy...........2016.01.03...3........2
yyy...........2016.01.02...2........1
yyy...........2016.01.01...1........null
不同的例子:
serial........date.........value....value_prev
xxx...........2016.01.03...12.......5
xxx...........2016.01.02...5........3
xxx...........2016.01.01...3........null
yyy...........2016.01.03...9........6
yyy...........2016.01.02...6........1
yyy...........2016.01.01...1........null
最佳答案
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(serial CHAR(3) NOT NULL
,date DATE NOT NULL
,value INT NOT NULL
,PRIMARY KEY (serial,date)
);
INSERT INTO my_table VALUES
('xxx','2016-01-03',12),
('xxx','2016-01-02',5),
('xxx','2016-01-01',3),
('yyy','2016-01-03',9),
('yyy','2016-01-02',6),
('yyy','2016-01-01',1);
SELECT x.*
, MAX(y.value) prev
FROM my_table x
LEFT
JOIN my_table y
ON y.serial = x.serial
AND y.date < x.date
GROUP
BY x.serial
, x.date;
+--------+------------+-------+------+
| serial | date | value | prev |
+--------+------------+-------+------+
| xxx | 2016-01-01 | 3 | NULL |
| xxx | 2016-01-02 | 5 | 3 |
| xxx | 2016-01-03 | 12 | 5 |
| yyy | 2016-01-01 | 1 | NULL |
| yyy | 2016-01-02 | 6 | 1 |
| yyy | 2016-01-03 | 9 | 6 |
+--------+------------+-------+------+
关于MySQL:获取上一个行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894827/