自定义查询计数和分组日期

时间:2012-10-31 00:08:23

标签: mysql

从数据库中,我正在尝试查找过去X天内已更新的个人资料,并根据日期对其进行分组。

我的SQL结构如下所示:
id(int)
date_modified(日期)

产生如下结果:

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

将date_modified转换为前几天并按上面显示的增量对其进行分组。

我假设在使用select查询中的情况下可能会有这种情况,但我对如何去做这件事感到有些不知所措。

2 个答案:

答案 0 :(得分:1)

您需要使用DATEDIFF 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;

答案 1 :(得分:1)

您需要在表名 - tbl中插入您现在使用的查询。对于特定日期,您现在需要()更改为“2012-06-10”。

查询 SQLFIDDLE example

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 |
相关问题