Mysql 自定义查询计数和分组日期
从数据库中,我试图找到在过去X天内更新过的配置文件,并根据日期对它们进行分组 我的SQL结构如下所示:Mysql 自定义查询计数和分组日期,mysql,Mysql,从数据库中,我试图找到在过去X天内更新过的配置文件,并根据日期对它们进行分组 我的SQL结构如下所示: id(int) 修改日期(日期) 这会产生如下结果: +----+---------------+ | id | date_modified | +----+---------------+ | 86 | 2012-06-22 | | 87 | 2012-06-22 | | 88 | 2012-06-22 | | 89 | 2012-06-22
id(int)
修改日期(日期) 这会产生如下结果:
+----+---------------+
| id | date_modified |
+----+---------------+
| 86 | 2012-06-22 |
| 87 | 2012-06-22 |
| 88 | 2012-06-22 |
| 89 | 2012-06-22 |
| 63 | 2011-10-31 |
| 72 | 2012-02-06 |
| 60 | 2011-10-17 |
| 71 | 2012-02-29 |
| 69 | 2011-11-18 |
| 76 | 2012-02-29 |
| 70 | 2011-11-18 |
| 75 | 2012-02-29 |
| 73 | 2012-02-06 |
| 74 | 2012-02-28 |
| 77 | 2012-02-29 |
| 80 | 2012-05-07 |
| 82 | 2012-06-12 |
| 83 | 2012-08-15 |
| 84 | 2012-09-07 |
| 85 | 2012-08-15 |
+----+---------------+
理想情况下,我希望处理查询,使其产生如下结果:
+-------+----------+
| total | days_ago |
+-------+----------+
| 4 | 1 |
| 6 | 2 |
| 8 | 3 |
| 12 | 7 |
| 3 | 30 |
| 55 | 90 |
| 28 | 180 |
| 37 | 270 |
| 42 | 360 |
+----+-------------+
它将修改的日期转换为几天前,并按上面显示的增量进行分组
我假设在select查询中使用cases可以实现这一点,但我有点不知道如何进行操作。您需要使用MySQL函数:
DATEDIFF()返回expr1–expr2,表示为从一个日期到另一个日期的天数值。expr1和expr2是日期或日期和时间表达式。计算中仅使用值的日期部分
在您的情况下,只需使用
SELECT COUNT(date_modified) as total, DATEDIFF(date_modified, NOW()) as days_ago FROM mytable GROUP BY date_modified;
您需要在表名-tbl中插入您现在使用的查询。对于具体日期,您现在需要()更改为“2012-06-10” 查询:
SELECT
COUNT(id) total ,
DATEDIFF(now(),date_modified) days_ago
FROM tbl
GROUP BY date_modified
ORDER BY days_ago
结果:
| TOTAL | DAYS_AGO |
--------------------
| 1 | 54 |
| 2 | 77 |
| 4 | 131 |
| 1 | 141 |
| 1 | 177 |
| 4 | 245 |
| 1 | 246 |
| 2 | 268 |
| 2 | 348 |
| 1 | 366 |
| 1 | 380 |