0

次のようなMySQLテーブルがあります。

+--------+------------+------------------+
|   id   | account_id |     posted_at    |
+--------+------------+------------------+
|   1    |       1    | 2013-10-05 23:09 |
|   2    |       1    | 2013-10-07 14:24 |
|   3    |       1    | 2013-10-07 01:17 |
|   4    |       1    | 2013-10-09 06:58 |
+--------+------------+------------------+

特定account_id(この場合は 1) について、これを返したい (当月の日付):

+--------+------------+
|  count |    date    |
+--------+------------+
|    0   | 2013-10-01 |
|    0   | 2013-10-02 |
|    0   | 2013-10-03 |
|    0   | 2013-10-04 |
|    1   | 2013-10-05 |
|    0   | 2013-10-06 |
|    2   | 2013-10-07 |
|    0   | 2013-10-08 |
|    1   | 2013-10-09 |
+--------+------------+

今月の各日付の COUNTS を返す SQL クエリがあります。

SELECT 
    DATE(posted_at) AS formatted_date, 
    COUNT(id) AS count 
FROM entries 
WHERE account_id = 1 
    AND MONTH(DATE(posted_at)) = MONTH(NOW()) 
GROUP BY formatted_date 
ORDER BY formatted_date ASC

これを返すだけです:

+--------+------------+
|  count |    date    |
+--------+------------+
|    1   | 2013-10-05 |
|    2   | 2013-10-07 |
|    1   | 2013-10-09 |
+--------+------------+

もちろん、COUNT はデータのない日付に対しては何も返しません。データのない日付の結果をゼロにしたい。

可能なすべての日付の結合テーブルを作成する必要があることを読みました。これが唯一の方法ですか?

4

1 に答える 1

0

このようなものを試すことができます

Declare @INT DATETIME = null
SELECT COUNT( CASE WHEN @INT IS NOT NULL THEN @INT ELSE NULL END)

mysqlについてはよくわかりませんが、SQLサーバーでは次のようになります...

SELECT 
    DATE(posted_at) AS formatted_date, 
    COUNT( CASE WHEN IS NOT NULL THEN posted_at ELSE NULL END ) AS [count] 
FROM entries 
WHERE account_id = 1 
    AND MONTH(DATE(posted_at)) = MONTH(NOW()) 
GROUP BY formatted_date 
ORDER BY formatted_date ASC
于 2013-10-09T18:57:39.017 に答える