mysql:6822
From: Shinya Kawaji <Shinya Kawaji <kawaji@xxxxxxxxxx>>
Date: Thu, 09 Jan 2003 19:20:38 +0900
Subject: [mysql 06822] Re: 日付型の条件検索について
かわじ、です。 > やってみないと分からないと思い、table3のやり方で現在奮闘中です。 > > table3のやり方だと、table2 に、新たにデータを更新すると、 > もちろんtable3にもデータが更新されるのですが、 > 更新するたんびに、日付データ(5年分)が入るって事ですよね? > > 何かいっぺんに5年分のデータをINSERTするSQL文ってあるのでしょうか? > 現在、5年分の日付データを配列に入れて、ループにして1個づつINSERT > してます。 > > 日付データだけ新たにテーブルを作ったら?との声がかかりそうですが、 > 現在の方法でなんとかしたいと思います。 table2 って、人名とコードの対応ですよね? 人名を増やすことと、「table3(日別の、コードとカウント数の対応)の 内容を全て一新する」ことの関係がよく分からないのですが・・ それはともかく、あのやり方は、 「今後 table1 は table3 に置き換える(更新も含めて)」という前提なので、 table1 形式でいくのなら、以下のようなやり方でどうでしょう。 SQLが2回に分かれますし、さらに先ほど、table3の話をしておきながら 申し訳ないのですが。 まず、最初に table2 の内容を、プログラムの変数(ハッシュか配列)に 入れておきます。これはこの次のSQLを生成するためのものです。 mysql> SELECT -> * -> FROM -> table2; +------+------------+--------+ | f_id | f_name | f_code | +------+------------+--------+ | 1 | あいうえお | aaa | | 2 | かきくけこ | bbb | | 3 | さしすせそ | ccc | | 4 | たちつてと | ddd | | 5 | なにぬねの | eee | | 6 | はひふへほ | fff | +------+------------+--------+ 6 rows in set (0.00 sec) 次に、table1 の内容を月別に集計します。 EXTRACT(YEAR_MONTH FROM time) を使います。 最も単純なのは、他の方もおっしゃっているように、SELECT文では月別を 縦列にして、出力時に縦横変換するものです。 sum(...) as ... の部分は、先ほどの変数を使って生成します。 mysql> SELECT -> EXTRACT(YEAR_MONTH FROM f_date_time) as month, -> sum(aaa) as 'あいうえお', -> sum(bbb) as 'かきくけこ', -> sum(ccc) as 'さしすせそ', -> sum(ddd) as 'たちつてと', -> sum(eee) as 'なにぬねの', -> sum(fff) as 'はひふへほ' -> FROM -> table1 -> GROUP BY -> month -> ORDER BY -> month; +--------+------------+------------+------------+------------+------------+------------+ | month | あいうえお | かきくけこ | さしすせそ | たちつてと | なにぬねの | はひふへほ | +--------+------------+------------+------------+------------+------------+------------+ | 200301 | 3 | 6 | 4 | 8 | 9 | 11 | +--------+------------+------------+------------+------------+------------+------------+ 1 row in set (0.00 sec) これを、SQLで縦横逆にすることも可能かもしれませんが、かなり複雑なものに なりますので、プログラム側で考えた方が楽だと思います。 -- Shinya Kawaji
6807 2003-01-08 22:03 [<lavlav@xxxxxxxxxx> ] Re: 日付型の条件検索について 6817 2003-01-09 16:51 ┣[Shinya Kawaji <kawaj] 6820 2003-01-09 18:12 ┃┗[<lavlav@xxxxxxxxxx> ] -> 6822 2003-01-09 19:20 ┃ ┗[Shinya Kawaji <kawaj] 6818 2003-01-09 17:38 ┗[谷中 <yanakas@xxxxxx] 6819 2003-01-09 18:03 ┗[<lavlav@xxxxxxxxxx> ]