count | date
4 | 2008-03-01
2 | 2008-03-04
1 | 2008-03-05
このようなテーブルからデータが存在しない日付も一緒に取得したいのですが、
簡単なやり方があれば教えてもらえないでしょうか?
count | date
4 | 2008-03-01
0 | 2008-03-02
0 | 2008-03-03
2 | 2008-03-04
1 | 2008-03-05
このような結果が取得できればオーケーです。
結果のdateの指定はどのように行うつもりでしょうか?もし列挙する形で良ければ以下のような形で実現できました。
--テストデータ用意 CREATE TABLE t1 (count int, date timestamp); INSERT INTO t1 VALUES (4, '2008-03-01'); INSERT INTO t1 VALUES (2, '2008-03-04'); INSERT INTO t1 VALUES (1, '2008-03-05'); --テスト実行 SELECT COALESCE(t1.count, 0) as count, days.date FROM ( SELECT '2008-03-01' AS date UNION SELECT '2008-03-02' UNION SELECT '2008-03-03' UNION SELECT '2008-03-04' UNION SELECT '2008-03-05' ) days LEFT OUTER JOIN t1 ON days.date=t1.date ORDER BY days.date;
これで質問と同じ結果が得られます。
こんな手順でしょうか。
コメントありがとうございます。
教えていただいた方法を試してみます。
ちょっとお求めの内容と違いますのでポイント不要です。
最初に
count | date
0 | 2008-03-01
0 | 2008-03-02
0 | 2008-03-03
0 | 2008-03-04
0 | 2008-03-05
のようなテーブルをdateをループして作っておき
count | date
4 | 2008-03-01
2 | 2008-03-04
1 | 2008-03-05
の分を該当テーブルからselectしてきてupdateします。
そのあと、全selectでお求めのデータが得られます。
コメントありがとうございます。
phpmyadminで試してみたのですが、後ろの方のSELECT文は何も起こりません。
エラーも出ないし結果も出ないという状況です。
もう少し頑張ってみます。