mysql - MySQL:A列和B列的累积总和到B列
问题描述
我有以下示例数据。在这里 ,我需要获取每个日期、小时、商店列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);
我需要按带有日期、时间和商店的结果集进行分组。
样本数据和所需结果在这里。ReqdColumn是所需的输出
解决方案
您可以实现 SQL ServerLAG
功能以获得该累积总和:
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
推荐阅读
- html - css停止工作时如何修复网站
- c# - 当我使用rigidbody2D.velocity.y 时出现语法错误
- apache-spark - 由于数据类型不匹配“SerializeFromObject”,Spark FlatMapGroupsWithStateFunction 抛出无法解析“named_struct()”
- android - 如何在适配器的arraylist中填充json数组项?
- r - 变量显示值,但 str 在 r 中显示 NULL。如何检查此类变量的结构?
- android - SwipeRefreshLayout 刷新动画不会停止,尽管我设置了 swipeView.setRefreshing(false)
- django - 在 Django 中一次提交中执行多个 save() 的最佳方法
- javascript - 如何从浏览器 URL 字段设置 cookie,而不导航到搜索引擎
- android - 如何等待异步 AudioTrack.write 完成?
- php - 如何使用 PHP 将来自不同 html 页面的数据连续读取到 JSON 文件中的一个大括号中?