2016-01-20 2 views
0

Как получить предыдущую строку в mysql? Например у меня есть данные: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 

Diferent пример:

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 
+0

ли значения всегда в подсчете порядке? Можете ли вы показать нам более сложные примеры данных для этого вопроса? –

+0

Да ладно. Попробуйте что-нибудь !! – Strawberry

+0

Вначале мне нужна группировка по порядку и по дате –

ответ

0
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 | 
+--------+------------+-------+------+ 
Смежные вопросы