0

データベースから、過去 X 日間に更新されたプロファイルを見つけて、日付に基づいてグループ化しようとしています。

私のSQL構造は次のようになります:
id (int)
date_modified (date)

次のような結果が生成されます。

+----+---------------+  
| 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 を数日前に変換し、上記の増分でグループ化しています。

選択クエリのケースを使用してこれが可能であると想定していますが、それを行う方法について少し途方に暮れています。

4

2 に答える 2

1

DATEDIFFMySQL関数を使用する必要があります。

DATEDIFF()は、ある日付から別の日付までの日数で表されたexpr1 –expr2を返します。expr1およびexpr2は、日付または日付と時刻の式です。値の日付部分のみが計算に使用されます。

あなたの場合、それは使用することによって簡単に解決されます

SELECT COUNT(date_modified) as total, DATEDIFF(date_modified, NOW()) as days_ago FROM mytable GROUP BY date_modified;
于 2012-10-31T00:10:37.173 に答える
1

テーブル名が必要です-tbl、現在使用しているクエリを挿入します。特定の日付については、 now() を「2012-06-10」に変更する必要があります。

クエリSQLFIDDLE の例:

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 |
于 2012-10-31T06:52:17.603 に答える