我有以下示例数据。 HERE 我需要获取每个日期、时间、商店的 abc-xyz 和 reqdcolumn 列的累计总和。 我的 mysql 版本是 5.7 Row over 解决方案不适用于我的 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);
我需要根据日期、时间和商店的结果集进行分组。
样本数据和要求的结果是here . ReqdColumn 是期望的输出
最佳答案
您可以实现 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
关于评论的更新:
Can you please tell me how can i get it to not do the cumulative count for the first 3 hours?
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
关于MySQL:A列和B列累计和到B列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55898202/