0

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

我的数据库是这样的

-----------------------------------------------------
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

例如:我在 2013 年 12 月 1 日的 crespo 计数为 1,在 13 年 1 月 13 日为 2,在 2013 年 1 月 14 日为 1

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

例如:crespo 计数应在 2013 年 12 月 1 日为 1,13 年 1 月 13 日为 3,13 年 1 月 14 日为 4

这在 mysql 中可能吗?

4

2 回答 2

1

我想这就是你要找的:

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   
于 2013-02-19T04:55:33.463 回答
0

试试这个,
你需要额外的变量来检查计数

小提琴示例

于 2013-02-19T04:48:27.060 回答