Как сделать Выполнение вычитания из другого столбца в MYSQL - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть пример данных:

Month        Val     Bval
Jan 2020   12000    0
Feb 2020            0
Mar 2020            100
Apr 2020            0
May 2020            500
Jun 2020           1000

Я хочу вычесть значения столбца рядом со столбцом значения. Необходимо получить вывод, как это:

Month        Val     Bval
Jan 2020   12000    0
Feb 2020   12000    0
Mar 2020   11900    100
Apr 2020   11900    0
May 2020   11400    500
Jun 2020   10400    1000

Я пытался с Co запросом:

SELECT t.Month,
         t.Bval,
         (SELECT x.val -t.Bval 
            FROM TABLE x
           WHERE x.Month <= t.Month) AS Val
    FROM TABLE t
ORDER BY t.Month

Не получается правильный результат.

Может ли кто-нибудь предложить мне подходящий способ

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

С самостоятельным объединением и агрегацией:

select t1.Month, sum(t2.Val) - sum(t2.Bval) Val, t1.Bval
from tablename t1 left join tablename t2
on str_to_date(concat(t1.Month, ' 01'), '%b %Y %d') >= str_to_date(concat(t2.Month, ' 01'), '%b %Y %d')
group by t1.Month, t1.Val, t1.Bval
order by str_to_date(concat(t1.Month, ' 01'), '%b %Y %d')

См. Демоверсию . Результаты:

> Month    |   Val | Bval
> :------- | ----: | ---:
> Jan 2020 | 12000 |    0
> Feb 2020 | 12000 |    0
> Mar 2020 | 11900 |  100
> Apr 2020 | 11900 |    0
> May 2020 | 11400 |  500
> Jun 2020 | 10400 | 1000
0 голосов
/ 27 апреля 2020

Используйте функции окна:

select t.*,
       (first_value(val) over (order by month) -
        sum(bval) over (order by month)
       ) as new_val
from t;

Это предполагает, что month действительно дата или что-то, что упорядочено разумным образом.

Здесь - это дб <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...