• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL文のとり方を教えてください。)

SQL文のとり方を教えてください

このQ&Aのポイント
  • 以前同内容で質問させていただきましたが、再度依頼させていただきたく投稿しました。
  • 1件の依頼No.にぶらさがる配送先が3か所あります。この中で一番新しい(=若い)日付の配送日&到着日をとりたいです。
  • 配送日と到着日はワンセットと考えて、新しい日付の配送日がとれたら、自動的に隣の到着日もとれるイメージです。(例でいけば上から2つ目の配送日:20110106 到着日:20110107)どういう風にSQL文を書いたらいいかわかりません。どなたか教えて頂けませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

SQLを考える時には理論を考えないと いけません。それと、質問が曖昧です。 >この中で一番新しい(=若い)日付の 日付は二つあるんですよね? 配送日なのか到着日なのかハッキリ しません。配送日が早くても、到着日が 遅い場合もあるのでは? 「新しい」と言いますが、2行目は一番 古いですよ。 ここでは「古い配送日」と仮定します。 (1)テーブルBから依頼No毎に、一番  日付の古い(小さい)ものを抽出する。 (2)上記クエリとテーブルBを依頼Noと  最も古い日付と結合させ、依頼Noと  枝番を抽出する。 (3)上記のクエリと依頼No、枝番が一致  するデータを抽出する。 これを表わすと以下のようになる。 SELECT A.* FROM テーブルB A INNER JOIN (SELECT B.依頼No,B.枝番 FROM テーブルB B INNER JOIN (SELECT D.依頼No,MIN(D.配送日) 過去日 FROM テーブルB D GROUP BY D.依頼No) C ON B.依頼No=C.依頼No AND B.配送日=C.過去日) E ON A.依頼No=E.依頼No AND A.枝番=E.枝番 ちょっと分かり難いので説明します。 2番目のサブクエリ"(SELECT D.依頼No~) C" この部分が(1)にあたります。このカッコの 内側は依頼No毎に最過去日を取っています。 1番目のサブクエリ"(SELECT B.依頼No~) E" ここは最初のクエリ(Cというエイリアス)と 依頼No、日付が一致するクエリで(2)にあたり ます。 最も外側の"SELECT A.*~"が目的の結果を 得るためのものです。 外国語なんでね、日本人の考えと逆順になる ところがイヤですね。

masatt0027
質問者

お礼

ご丁寧な説明に感謝致します。 無事作成できました。有難うございました。

その他の回答 (1)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

テーブルAは使う必要があるのでしょうか? 欲しいデータはテーブルBだけでも事足りますよね。 http://okwave.jp/qa/q6431441.html の回答で問題ないと思うのですが・・ ちなみに上記の回答の「table名」の箇所には今回の質問でいう<テーブルB>が入ります。 a、b とあるのは、ただのエイリアスだということは分かってらっしゃいますか?

関連するQ&A