首页 > 解决方案 > 每天计数(mysql)

问题描述

我想要这样的东西

mysql数据

(dat_reg)
1.1.2000 
1.1.2000 
1.1.2000
2.1.2000
2.1.2000
3.1.2000

我想得到:

   (dat_reg)  (count)
    1.1.2000 -   3
    2.1.2000 -   5
    3.1.2000 -   6

我尝试的是这样的:

SELECT COUNT( * ) as a , DATE_FORMAT( dat_reg, '%d.%m.%Y' ) AS dat 
FROM members 
WHERE (dat_reg > DATE_SUB(NOW() , INTERVAL 5 DAY)) 
GROUP BY DATE_FORMAT(dat_reg, '%d.%m.%Y') 
ORDER BY dat_reg 

但我得到:

 1.1.2000 - 3 | 2.1.2000 - 2 | 3.1.2000 - 1 

一些提示如何为此创建查询?

标签: mysqlsql

解决方案


我建议在 MySQL 中使用变量:

SELECT d.*, (@sumc := @sumc + cnt) as running_cnt
FROM (SELECT DATE_FORMAT(dat_reg, '%d.%m.%Y') as dat, COUNT(*) as cnt
      FROM members 
      WHERE dat_reg > DATE_SUB(NOW() , INTERVAL 5 DAY) 
      GROUP BY dat
      ORDER BY dat_reg 
     ) d CROSS JOIN
     (SELECT @sumc := 0) params;

如果你想从一开始就累积,那么你需要一个额外的子查询:

SELECT d.*
FROM (SELECT d.*, (@sumc := @sumc + cnt) as running_cnt
      FROM (SELECT DATE_FORMAT(dat_reg, '%d.%m.%Y') as dat, dat_reg, COUNT(*) as cnt
            FROM members 
            GROUP BY dat
            ORDER BY dat_reg 
           ) d CROSS JOIN
           (SELECT @sumc := 0) params
      ) d
WHERE dat_reg > DATE_SUB(NOW() , INTERVAL 5 DAY)

推荐阅读