mysql - 每天计数(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
一些提示如何为此创建查询?
解决方案
我建议在 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)
推荐阅读
- python - 优化数据框操作
- angular - 我们真的需要 URL 重写模块来在 IIS 上托管 Angular 应用程序吗?
- google-bigquery - 去年的星期几
- spring - javax.inject.Inject bean 在 Spring 引导中无法识别
- c - 为什么当我在它之前/之后有 printf() 时,“malloc():损坏的最大尺寸”错误得到修复?
- php - 无法连接主机:80:超时 cURL php
- c++ - C++ 和 wxWidgets DLL 创建和使用微软访问
- javascript - 如何自动在每周更改的网页上插入特定日期?
- node.js - Mongoose 过滤器嵌套数组
- java - 如何从spring-boot jar BOOT-INF\lib 文件夹中提取文件