- ベストアンサー
副問合せを使わないでグループごとの最新日付を取得
- MySQL4.0.2xを使用して、副問合せを使わずにグループごとの最新日付を取得する方法を教えてください。
- 発行履歴テーブルを購入IDでグループ化し、各グループ内で発行日が最新のレコードを取得したいです。
- 以前に副問合せを使って同様の処理を行ったことがありますが、副問合せの使用方法に慣れているため、副問合せを使わずにどのように実現できるかわかりません。お手数ですが、良い方法をご教授いただけますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
4.0でサブクエリが使えないとなると・・ (1)いったん購入ID, max(発行日)を購入IDでグループ化して(最終目的とは別の)テンポラリテーブルに書き込む。 (2)元テーブルと(1)のテーブルを(購入IDと発行日で)結合して、一致したものだけを抽出する。 でいいと思います。
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
>No.2 >参照番号でジョインしようとしていますよね? >行を一意に定められる情報が、いくつもあるように見えるのですが? 多分「発行日が最新のレコードを、全カラム」という全カラムというのを何とかしようと試行錯誤してこうなってしまったのではないかと(あくまでも推測)。 サブクエリが使えれば購入IDごとのmax(発行日)を取り出すクエリとjoinするんでしょうけどね。サブクエリが使えなければ「そのクエリの結果をテーブルに吐き出して」そのテーブルとjoinするのが手っ取り早いとは思います。
お礼
そうですね、、サブクエリ使えないのは痛いです。。 やはりテンポラリテーブルを2回作成するしかないみたいですね・・。 実はデータ量が多く、全データ対象のクエリーを小分けにしてかけてしまうと負担が掛かりそうなので、インターフェース変更をお願いして対処した方がよいかもしれないと思えてきました。。 ご回答ありがとうございました。
- chukenkenkou
- ベストアンサー率43% (833/1926)
タイトルでは「グループごとの最新日付を取得」となっていますが、参照番号でジョインしようとしていますよね? 行を一意に定められる情報が、いくつもあるように見えるのですが? 購入ID+連番の最大値=参照番号=発行日が最新 なのでしょうか?
補足
>購入ID+連番の最大値=参照番号=発行日が最新 はい、データ上そうなっているようです。 実はこのシステム自体自分が作成したものではない上、オリジナルの作成者が捕まらないので、何件かの実データを見ての判断ですが、 私にも行を一意に定められる情報が複数あるように見えます。 なぜそうなっているのかは不明です。 まずあり得ないと思うんですが、万一購入IDグループ内で発効日が重なった場合どうしよう?、というところで安直に参照番号を選びました。
お礼
やはりテンポラリテーブル×2しかなさそうですね。。有難うございました。