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/08 21:33:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント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

回答回数5960ベストアンサー獲得回数633

ポイント33pt

こんな手順でしょうか。

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

参考サイト

id:southgate_01

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


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

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

回答回数767ベストアンサー獲得回数128

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

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

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

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

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

回答リクエストを送信したユーザーはいません