MySQL: накопленная сумма столбца A и столбца B в столбец B - PullRequest
1 голос
/ 29 апреля 2019

У меня есть следующие образцы данных. ЗДЕСЬ Мне нужно получить совокупную сумму столбца abc-xyz и reqdcolumn за дату, час, магазин.Моя версия mysql - 5.7. Решение для строки поверх не работает для моей версии mysql.

Пример данных

date      hour  Shop       abc     xyz  Diffabcxyz  ReqdColumn
---------------------------------------------------------------
20190428    1       1       0       0       0           0
20190428    2       1       5       4       1           0
20190428    3       1       15      8       7           1
20190428    4       1       16      9       7           8
20190428    5       1       14      13      1           15
20190428    6       1       8       12      -4          16
20190428    7       1       14      16      -2          12
20190428    8       1       9       7       2           10
20190428    9       1       5       2       3           12
20190428    10      1       6       2       4           15
20190428    1       2       0       0       0           0
20190428    2       2       7       1       6           0
20190428    3       2       5       -2      3           6
20190428    4       2       6       -5      1           9
20190428    5       2       4       7       -3          10
20190428    6       2       5       -8      -3          7
20190428    7       2       2       -9      -7          4
20190428    8       2       9       -10     -1          -3
20190428    9       2       6       4       2           -4
20190428    10      2       2       -12     -10         -2
20190428    1       3       0       0       0           0
20190428    2       3       6       -11     -5          0
20190428    3       3       8       -4      4           -5
20190428    4       3       5       -5      0           -1
20190428    5       3       9       8       1           -1
20190428    6       3       2       -1      1           0
20190428    7       3       4       4       0           1
20190428    8       3       1       2       -1          1
20190428    9       3       11      -4      7           0
20190428    10      3       0       1       -1          7

Я пытался составить накопительную сумму, но не знал, как сгруппировать понабор результатов.

Проверенные коды:

Выбор тестирования

set @csum := 0;

SELECT 
    date, hour, shop, (@csum:=@csum + Diffabcxyz)
FROM
    SampleTable
GROUP BY date, hour, shop;

обновление тестирования

set @csum := 0;
update sampletable
set reqdcolumn = (@csum := @csum + Diffabcxyz);

Мне нужно сгруппировать по набору результатов сдата, время и магазин.

Пример данных и требуемый результат здесь . ReqdColumn - желаемый вывод

1 Ответ

1 голос
/ 29 апреля 2019

Вы можете достичь функционала SQL Server LAG, чтобы получить эту совокупную сумму:

select @lagDate := 0, @lagShop := 0, @diffLag := 0, @cumSum := 0;

select *,
       case when @lagDate = Date and @lagShop = Shop then @cumSum := @cumSum + @diffLag else @cumSum := 0 end,
       @diffLag := Diffabcxyz,
       @lagDate := Date,
       @lagShop := Shop
from tbl
order by shop, date, hour

Демо

ОБНОВЛЕНИЕ относительно комментария:

Подскажите, пожалуйста, как я могу заставить его не делать кумулятивный подсчет за первые 3 часа?

select @lagDate := 0, @lagShop := 0, @diffLag := 0, @cumSum := 0, @diffLagLag := 0;

select *,
       case when @lagDate = Date and @lagShop = Shop then @cumSum := @cumSum + @diffLagLag else @cumSum := 0 end,
       @diffLagLag := @diffLag,
       @diffLag := Diffabcxyz,
       @lagDate := Date,
       @lagShop := Shop
from tbl
order by shop, date, hour

Еще одна демоверсия

ДРУГОЕ ОБНОВЛЕНИЕ:

select @lagDate := 0, @lagShop := 0, @diffLag := 0, @cumSum := 0;

select *,
       case when @lagDate = Date and @lagShop = Shop and Hour > 3 then @cumSum := @cumSum + @diffLag else @cumSum := 0 end,
       @diffLag := Diffabcxyz,
       @lagDate := Date,
       @lagShop := Shop
from tbl
order by shop, date, hour

Еще одна демка

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