SQLite вычислить разницу между двумя строками с условием
У меня есть таблица tb1
| id(KEY) | idprod | allregion |
|---|---|---|
| 1 | 34 | 28 |
| 2 | 34 | 142 |
| 3 | 44 | 3 |
| 4 | 44 | 16 |
| 5 | 65 | 1132 |
| 6 | 65 | 768 |
Мне нужно вычислить разницу значений allregion между одинаковыми idprod и поместить это в столбик diff. Должно получиться вот так:
| id(KEY) | idprod | allregion | diff |
|---|---|---|---|
| 1 | 34 | 28 | 0 |
| 2 | 34 | 142 | 114[142-28] |
| 3 | 44 | 3 | 0 |
| 4 | 44 | 16 | 13[16-3] |
| 5 | 65 | 1132 | 0 |
| 6 | 65 | 768 | -364[768-1132] |
*[в скобках указан пример вычислений]
Мой код
SELECT id, idprod, allregion,
CASE WHEN idprod = LAG(idprod, 1) OVER (ORDER BY idprod desc, id desc)
THEN (allregion - LAG(allregion, 1) OVER (ORDER BY id desc)) ELSE '0'
END AS diff
FROM tb1
выдает таблицу с нулевыми значениями allregion
| id(KEY) | idprod | allregion | diff |
|---|---|---|---|
| 1 | 34 | 0 | 0 |
| 2 | 34 | 0 | 114[142-28] |
| 3 | 44 | 0 | 0 |
| 4 | 44 | 0 | 13[16-3] |
| 5 | 65 | 0 | 0 |
| 6 | 65 | 0 | -364[768-1132] |
и я не могу понять почему, помогите, пожалуйста
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Попробуйте использовать PARTITION BY и функцию IFNULL()
SELECT id, idprod, allregion,
IFNULL(allregion - LAG(allregion, 1) OVER (PARTITION BY idprod),0) AS diff
FROM tb1
