MySQL5における質問です。


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

このような結果が取得できればオーケーです。

回答の条件
  • 1人5回まで
  • 登録:2008/03/06 19:17:25
  • 終了:2008/03/08 21:33:13

回答(3件)

id:y-kawaz No.1

y-kawaz回答回数1420ベストアンサー獲得回数2252008/03/06 19:41:09

ポイント33pt

結果の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;

これで質問と同じ結果が得られます。

id:southgate_01

コメントありがとうございます。


phpmyadminで試してみたのですが、後ろの方のSELECT文は何も起こりません。

エラーも出ないし結果も出ないという状況です。

もう少し頑張ってみます。

2008/03/06 21:03:52
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/03/06 19:57:01

ポイント33pt

こんな手順でしょうか。

  1. MAXとMIXを使って日付の最大値と最小値を取得する。
  2. WHILEステートメントを使って、最小値から最大値までループする。
  3. CASE関数を使って、合致する日付があればIDを、無ければ0を返す。

参考サイト

id:southgate_01

コメントありがとうございます。


教えていただいた方法を試してみます。

2008/03/06 21:06:18
id:karuishi No.3

ニャンざぶろう回答回数764ベストアンサー獲得回数1282008/03/06 23:56:39

ポイント15pt

ちょっとお求めの内容と違いますのでポイント不要です。

  

最初に

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でお求めのデータが得られます。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません