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
如:我在13年12月1日在13/01/13和1对14/01/13
了克雷斯波算作1,2现在我想要得到的运行中计设备即将前一天的值添加到当天的下载并继续直到结束。
如:克雷斯波数应该为1对13年12月1日,3 13/01/13和4 14/01/13
在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
和样品小提琴: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