mysql вычитать строку за строкой
У меня два представления mysql (5.6). Одно представление содержит только одно значение в одной строке столбца on. Скажем, столбец А, и в этой единственной строке у меня есть значение 5000.
У меня есть второе представление с 3 столбцами: элемент (varchar), дата (очевидно, содержит даты) и значение (десятичное). Этот второй вид имеет 4 строки, поэтому он выглядит так:
item date value
'lectii de pian', '2015-11-09', '101.88'
'Microsoft office','2015-11-11', '7.00'
'Belasting', '2015-11-15', '524.00'
'Netflix', '2015-11-18', '8.99'
Что я хочу сделать, это создать в этом представлении еще один столбец, назовем его "B" и вычесть первое значение в значении столбца из значения в представлении A, а затем из результата вычесть следующее значение и так далее, чтобы он выглядел как этот
item date value B
'lectii de pian', '2015-11-09', '101.88' '4898.12'
'Microsoft office','2015-11-11', '7.00' '4891.12'
'Belasting', '2015-11-15', '524.00' '4367.12'
'Netflix', '2015-11-18', '8.99' '4358.13'
Любые идеи Как я мог бы добиться этого в MySQL 5.6?
Большое спасибо!
2 ответа
Использовать @variable
провести текущее вычитание, инициализируя его из представления А.
SELECT b.item, b.date, b.value, @running := @running - value AS b
FROM view2 AS b
CROSS JOIN (SELECT @running := a FROM view1) AS a
ORDER BY b.date
Пример данных:
CREATE TABLE t1
(`item` varchar(50), `date` date, `value` decimal(6,2))
;
INSERT INTO t1
(`item`, `date`, `value`)
VALUES
('lectii de pian,', '2015-11-09,', 101.88),
('Microsoft office', '2015-11-11,', 7.00),
('Belasting,', '2015-11-15,', 524.00),
('Netflix,', '2015-11-18,', 8.99)
;
CREATE TABLE t2
(`a` int)
;
INSERT INTO t2
(`a`)
VALUES
(5000)
;
Запрос:
SELECT
t1.*,
@v := @v - `value` AS B
FROM
t1
, (SELECT @v := (SELECT MAX(a) FROM t2)) var_init_subquery
ORDER BY `date`
Результат:
| item | date | value | B |
|------------------|----------------------------|--------|---------|
| lectii de pian, | November, 09 2015 00:00:00 | 101.88 | 4898.12 |
| Microsoft office | November, 11 2015 00:00:00 | 7 | 4891.12 |
| Belasting, | November, 15 2015 00:00:00 | 524 | 4367.12 |
| Netflix, | November, 18 2015 00:00:00 | 8.99 | 4358.13 |
- увидеть это работает вживую в http://sqlfiddle.com/
- Узнайте больше о пользовательских переменных в руководстве