Создать представление БД, где каждая строка принимает значения из предыдущей - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть такая таблица БД (другие столбцы опущены)

date          | change

2018/10/10    |  +8
2018/10/31    |  -5
2018/11/01    |  +3
2018/11/03    |  -2

Я хочу создать представление БД из этой таблицы, отображающее это

date          | change  | cumulative
2018/10/10    |  +8     |  8
2018/10/31    |  -5     |  3
2018/11/01    |  +3     |  6
2018/11/03    |  -2     |  4

кумулятивный, который является кумулятивным по предыдущей записи (упорядоченный по дате) плюс / минус изменение текущей записи

Есть ли дешевый способ (с точки зрения вычислений), который мог бы создать такое представление?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

В MySQL 8+ вы можете сделать:

select t.*,
       sum(change) over (order by date) as cumulative
from t;

В более ранних версиях я рекомендовал бы коррелированный подзапрос:

select t.*,
       (select sum(t2.change) from t t2 where t2.date <= t.date) as cumulative
from t;

Это будет работать в представлении и может занятьпреимущество индекса на (date, change).

Эта версия, вероятно, не так эффективна, как использование переменных в более старых версиях MySQL, но она должна быть лучше, чем решение join / group by.

0 голосов
/ 15 ноября 2018

Попробуйте этот запрос.

SELECT t1.Date, t1.Change, SUM(t2.Change) AS Cumalative
FROM YourTable t1
INNER JOIN YourTable t2 on t1.Date >= t2.Date
GROUP BY t1.Date, t1.Change
ORDER BY t1.Date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...