1
+-------------+---------------------+
| uid         | date                |
+-------------+---------------------+
|          35 | 01-11-2009 19:32:44 | 
|          35 | 01-13-2009 22:33:49 | 
|          42 | 01-23-2009 22:08:24 | 
|          42 | 02-01-2009 22:33:57 | 
|          35 | 02-01-2009 22:37:34 | 
|          35 | 04-20-2009 15:23:49 | 
+-------------+---------------------+

特定の uid のような毎日のカウントを取得し、(範囲内で) 空の日を表示したい:

User 35 (21 days)
01-11-2009 -> 1
01-12-2009 -> 0
01-13-2009 -> 1
01-14-2009 -> 0
01-15-2009 -> 0
01-16-2009 -> 0
01-17-2009 -> 0
01-18-2009 -> 0
01-19-2009 -> 0
01-20-2009 -> 0
01-21-2009 -> 0
01-22-2009 -> 0
01-23-2009 -> 0
01-24-2009 -> 0
01-25-2009 -> 0
01-26-2009 -> 0
01-27-2009 -> 0
01-28-2009 -> 0
01-29-2009 -> 0
01-30-2009 -> 0
01-31-2009 -> 0
02-01-2009 -> 1

これまでのところ私は得た

SELECT MONTHNAME(date), COUNT(uid) FROM cliques_referidos WHERE uid = 35 GROUP BY YEAR(date), MONTH(date), DAY(date)

その間の日数を 0 カウントにする方法は?

4

1 に答える 1

2

オプションであると仮定して、日付ルックアップ テーブルの作成を検討してください。次に、 を使用して簡単にOUTER JOINリストを作成できます。ここにそれに関するSOの投稿があります。

datelookupという日付フィールドを使用してルックアップ テーブルを呼び出すとdatevalue、次のように動作するはずです。

SELECT MONTHNAME(d.datevalue), COUNT(cr.uid) 
FROM datelookup d LEFT JOIN
    cliques_referidos cr ON d.datevalue = DATE(cr.date)
        and cr.uid = 35 
GROUP BY YEAR(d.datevalue), MONTH(d.datevalue), DAY(d.datevalue)

日付フィールドは日時であるためDATE()、結合で使用します。

ルックアップ テーブルを作成できない場合は、MySQL が再帰 CTE をサポートしていないため、ストアド プロシージャまたは関数の使用を検討してください。いくつかの例については、SO を検索してください。

于 2013-06-12T23:23:54.043 に答える