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を教えてください。

回答の条件
  • 1人5回まで
  • 登録:2006/08/08 10:06:11
  • 終了:2006/08/10 10:10:45

回答(3件)

id:ito-yu No.1

ito-yu回答回数323ベストアンサー獲得回数142006/08/08 10:17:40

ポイント30pt

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

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

id:pipi_n

ありがとうございます。

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型なので ||演算子が使えてないのでしょうか?

2006/08/08 10:52:14
id:ito-yu No.2

ito-yu回答回数323ベストアンサー獲得回数142006/08/08 13:29:26

ポイント20pt

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

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

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

id:ito-yu No.3

ito-yu回答回数323ベストアンサー獲得回数142006/08/08 13:42:00

ポイント30pt

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;

id:pipi_n

ありがとうございます。

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

2006/08/08 17:05:21

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

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

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

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

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