2016-03-04 5 views
0

Я хотел бы получить разницу между двумя последовательными строками в MySql. Я пытаюсь решить, но не повезло. Вот данные в изображенииРазница между последовательными строками в Mysql

http://i.stack.imgur.com/keIdU.png

мне нужна разность между рядами колонка «data2» и результатами в колонку «Diff».

Спасибо за ваше внимание и большое спасибо за вашу помощь.

-RAM

+0

Каковы ваши ожидаемые результаты от вашего данного экрана? – sgeddes

+0

Это все ваши столбцы? Есть ли первичный ключ? –

+0

Ожидаемые результаты - это разница в результатах столбца «Data2» (558-536), (578-558) и т. Д. Первичный ключ - application_id – IamRKY

ответ

0

Если таблица имеет автоматический инкрементный столбец «идентификатор», мы можем заказать по идентификатору и определить следующее значение строки и вычитать его

SELECT t1.*, t1.Data2-(SELECT t2.Data2 FROM `table_name` t2 WHERE t2.id > t1.id LIMIT 1) AS difference 
FROM `table_name` t1 
ORDER BY t1.id 

вычесть из следующего значения строки

SELECT t1.*, t1.Data2-(SELECT t2.Data2 FROM `table_name` t2 WHERE t2.id < t1.id ORDER BY id DESC LIMIT 1) AS difference 
FROM `table_name` t1 
ORDER BY t1.id 
+0

Пробовал. но результаты не ожидаются. Спасибо за поддержку. – IamRKY

+0

Я обновил свой ответ. посмотрите –

+0

все еще не повезло. Еще раз спасибо – IamRKY

0

Поскольку вы не имеете уникальный столбец в вашей таблице, вы можете достичь этого, включая переменную связывания [@rn & @rn1], который добавляет уникальный номер последовательно к каждой строке в таблице.

Попробуйте это:

SELECT tab1.application_id, tab1.fiscal_year, tab1.data1, coalesce(cast(tab1.data2 as signed) - 
       cast(tab2.data2 as signed), tab1.data2) as diff 
    FROM 
     (SELECT b.application_id, @rn1:[email protected]+1 AS rank, b.fiscal_year, b.data1, b.data2 
     FROM your_table b, (SELECT @rn1:=0) t1) as tab1, 
     (SELECT a.application_id, @rn:[email protected]+1 AS rank, a.fiscal_year, a.data1, a.data2 
     FROM your_table a, (SELECT @rn:=0) t2) as tab2 
WHERE tab1.rank = tab2.rank + 1; 
Смежные вопросы