Mysql - 是否可以累积前一行值的总和

标签 mysql

我已经尝试了一段时间,但没有成功。

我的数据库是这样的

-----------------------------------------------------
DEVICE_HASH | DEVICE_NAME | DEVICE_VERISON | DATE
-----------------------------------------------------
122138223823| crespo      | 1.1            | 12/01/13
122138213823| jewell      | 1.2            | 12/01/13
122138223823| crespo      | 1.1            | 13/01/13
122138263823| crespo      | 1.1            | 13/01/13
122138283823| blade       | 1.2            | 13/01/13
122138293823| crespo      | 1.1            | 14/01/13
-----------------------------------------------------

为了获取每天下载的设备数量,我执行了以下查询,效果很好。

SELECT DATE_FORMAT(DATE, '%Y-%m-%d') as 'date', DEVICE_NAME as 'device' ,COUNT(*) as 'count' FROM table_name GROUP BY DATE_FORMAT(DATE, '%Y-%m-%d'), DEVICE_NAME

例如:我在 12/01/13 得到的 crespo 计数为 1,在 13/01/13 得到的 crespo 计数为 2,在 14/01/13 得到的 crespo 计数为 1

现在我想获取设备的运行计数,即将前一天的值添加到当天的下载中并继续直到结束。

例如:crespo 计数在 12/01/13 应该为 1,在 13/01/13 为 3,在 14/01/13 为 4

这在mysql中可能吗?

最佳答案

我认为这就是您正在寻找的:

SELECT
  @runningTotal:=IF(@prevDevice=Device_Name,@runningTotal+cnt,cnt) rt,
  dt, Device_Name, cnt,
  @prevDevice:=Device_Name
FROM (
  SELECT 
    DATE_FORMAT(DATE, '%Y-%m-%d') as dt, 
    DEVICE_NAME ,
    COUNT(*) as cnt
  FROM table_name 
  GROUP BY DATE_FORMAT(DATE, '%Y-%m-%d'), DEVICE_NAME
  ORDER BY DEVICE_NAME, 2
) t
  JOIN (SELECT @runningTotal:=0) r

示例 fiddle :http://sqlfiddle.com/#!2/e3525/1

这会产生以下结果:

RT  DT          DEVICE_NAME     CNT 
1   2013-01-13  blade           1   
1   2014-01-13  crespo          1   
3   2013-01-13  crespo          2   
4   2012-01-13  crespo          1   
1   2012-01-13  jewell          1   

关于Mysql - 是否可以累积前一行值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14949772/

相关文章:

php - SESSION checkin 用户页面

mysql - Doctrine 2 - float 后两位小数?

MySQL-从多个where子句中获取第一个非空结果

带有 MySQLdb 的 Python Tkinter 列表框

mysql - 在 MySql 中删除未命名的外键

javascript - 两个下拉列表,第二个下拉列表填充数据库中的值

MySQL:当每个日期有多个值时,MAX(日期)

mysql - 从表中检索二级友谊并排除一级 friend

mysql - 1064(您的 SQL 语法有错误;

mysql - 使用多列子查询优化查询