人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: southgate_01
●カテゴリ:コンピュータ インターネット
✍キーワード:オーケー データ 存在
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● y-kawaz
●33ポイント

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

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

◎質問者からの返答

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


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

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

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


2 ● pahoo
●33ポイント

こんな手順でしょうか。

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

参考サイト

◎質問者からの返答

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


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


3 ● ニャンざぶろう
●15ポイント

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

最初に

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ