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

SQL + perlで質問です。

テーブル
年|月|日|データ
2006|07|01|りんご
2006|07|01|ばなな
2006|07|02|キリン
2006|07|09|ライオン
2006|07|09|カッパ
2006|07|15|ヨーグルト
2006|07|30|スイカ
2006|08|01|いちご
2006|08|05|桃

このデータの3日分のデータを取りたいです。
7月1日から3日分だと
年|月|日|データ
2006|07|09|ライオン
2006|07|09|カッパ
2006|07|02|キリン
2006|07|01|りんご
2006|07|01|ばなな


7月15日から3日分だと
2006|08|01|いちご
2006|07|30|スイカ
2006|07|15|ヨーグルト


といった感じでソートもあると最高です。

その日分のレコード数は増えたり減ったり、そのときにより違います。
年月日をUNIX_TIMESTAMPで秒数にして・・・とかやってみたのですが
なんか効率が悪い&件数がうまく拾えないので
すばらしいSQLを教えてください。

●質問者: pipi_n
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2006 7月15日 7月1日 Perl SQL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ito-yu
●30ポイント

SELECT * FROM テーブル WHERE 年||月||日 IN (SELECT DISTINCT 年||月||日 FROM テーブル ORDER BY 年||月||日 DESC LIMIT 3) ORDER BY 年 DESC,月 DESC,日 DESC;

IN構文やLIMIT構文はDBMSによって違うかも知れませんが、そこは適宜変更してください。

◎質問者からの返答

ありがとうございます。

phpMyAdminで試してみましたがエラー出てしまいました。

MySQLに無い命令が含まれているんですかね・・・?

バージョン MySQL 4.0.24

エラー内容は

MySQLのメッセージ -->

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT DISTINCT 年||月||日 FROM テーブル ORDER BY 年||

なんか、途中で切れたようなエラーメッセージですが、こんなのが表示されました。

年月日はINT型なので ||演算子が使えてないのでしょうか?


2 ● ito-yu
●20ポイント

INT型であれば、年||月||日 を 年*10000+月*100+日 に置き換えてみてください。

MySQLのバージョンが古ければ、サブクエリ(IN)も使えないかもしれません。

書き換え方は→http://dev.mysql.com/doc/refman/4.1/ja/rewriting-subqueries....


3 ● ito-yu
●30ポイント

MySQL4.1で以下のようなSQLは動くと思います。

私が試したのはカラム名は日本語ではありませんが…

SELECT t.* FROM テーブル AS t,(SELECT DISTINCT 年*10000+月*100+日 AS 年月日 FROM テーブル ORDER BY 年月日 DESC LIMIT 3) AS s WHERE t.年*10000+月*100+日=s.年月日 ORDER BY t.年 DESC,t.月 DESC,t.日 DESC;

◎質問者からの返答

ありがとうございます。

MySQL4.0ではサブクエリがサポートされていないようなので2回に分けて処理することで解決できました!

関連質問


●質問をもっと探す●



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