次の表について、ユーザーごと、1日あたりのメッセージ数をカウントしたいと思います。
+---------+---------+------------+
| msg_id | user_id | m_date |
+-------------------+------------+
| 1 | 1 | 2011-01-21 |
| 2 | 1 | 2011-01-23 |
| 3 | 1 | 2011-01-23 |
| 5 | 2 | 2011-01-23 |
| 6 | 2 | 2011-01-24 |
| 8 | 1 | 2011-01-23 |
| 9 | 2 | 2011-01-23 |
| 10 | 1 | 2011-01-24 |
+---------+---------+------------+
望ましいアウトパーは次のようになります。
1 2011-01-21 1
2 2011-01-21 0
1 2011-01-22 0
2 2011-01-22 0
1 2011-01-23 3
2 2011-01-23 2
1 2011-01-24 1
2 2011-01-24 1
次のクエリを使用します。
SELECT m_date, COUNT(msg_id ) AS volume
FROM messages
GROUP BY user_id, m_date
ORDER BY user_id, m_date ASC
しかし、ここでは、ボリュームがゼロの日が結果セットから除外されています。
1 2011-01-21 1
1 2011-01-23 3
2 2011-01-23 2
1 2011-01-24 1
2 2011-01-24 1
しかし、私はその日を結果セットに入れたいと思っています。したがって、結果が必要なすべての日付を含む「daterange」テーブルを使用する必要があることを理解しました。
+---------+------------+
| date_id | d_date |
+---------+------------+
| 1 | 2011-01-21 |
| 2 | 2011-01-22 |
| 3 | 2011-01-23 |
| 4 | 2011-01-24 |
+---------+------------+
ただし、必要な結果セットを取得するために、最初のテーブルに従ってこのテーブルを使用する方法がわかりません。あなたは?