Вы можете использовать подзапрос, чтобы найти count
за предыдущий id
.
В случае, если нет пробелов в ID
колонке:
SELECT CONCAT(t.`id` ,' - ', t.`id` - 1) AS `IDs`
, t.`count` - (SELECT `count`
FROM `tbl`
WHERE `id` = t.`id` - 1) AS `Difference`
FROM `tbl` t
WHERE t.`id` > 1
SQLFiddle
В случае, если есть пробелы в ID
колонке. Первое решение, используя ORDER BY <...> DESC
с LIMIT 1
:
SELECT CONCAT(t.id ,' - ', (SELECT `id` FROM tbl WHERE t.id > id ORDER BY id DESC LIMIT 1)) AS IDs
, t.`count` - (SELECT `count`
FROM tbl
WHERE t.id > id
ORDER BY id DESC
LIMIT 1) AS difference
FROM tbl t
WHERE t.id > 1;
SQLFiddle
Второе решение, используя другой подзапрос, чтобы найти count
с MAX(id)
меньше, чем текущий id
:
SELECT CONCAT(t.id ,' - ', (SELECT MAX(`id`) FROM tbl WHERE id < t.id)) AS IDs
, t.`count` - (SELECT `count`
FROM tbl
WHERE `id` = (SELECT MAX(`id`)
FROM tbl
WHERE id < t.id)
) AS difference
FROM tbl t
WHERE t.id > 1;
SQLFiddle
P.S. : Первая колонка, IDs
, предназначена только для удобства чтения, вы можете опустить ее или полностью изменить, если это необходимо.
Вы могли бы хотеть, чтобы увидеть, если Http: // StackOverflow.com/questions/20849098/mysql-how-get-value-in-previous-row-and-value-in-next-row поможет. –