2012-10-31 68 views
0

從數據庫中,我試圖找到最近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轉換爲數天前的數值,並按照上面所示的增量進行分組。

我假設這將是可能的使用案例在選擇查詢,但我有點在如何去做這件事的損失。

回答

1

你需要使用MySQL的DATEDIFF功能:

DATEDIFF()返回表達式1 - 表達式2天表現爲一個值從一個日期到其他。 expr1和expr2是日期或日期和時間表達式。計算中只使用數值的日期部分。

在你的情況下,它只是利用

SELECT COUNT(date_modified) as total, DATEDIFF(date_modified, NOW()) as days_ago FROM mytable GROUP BY date_modified; 
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 |