- ベストアンサー
複数テーブルのMAX値の行データを取得する方法
- 複数のテーブル(A、B、C)から特定の条件下でMAX値の行データを取得する方法について解説します。
- SAGYO_NOを指定したA、B、Cのうちで、SAGYO_DTが最新の行のSAGYO_DT、TANTO、NAIYOを一回のSQLで取得する方法を紹介します。
- 質問文章ではうまくできないと述べられていますが、本記事で解説する方法を使うことで問題を解決することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
SELECT SAGYO_NO,SAGYO_DT,TANTO,NAIYO FROM ( SELECT U.*, RANK() OVER( ORDER BY SAGYO_DT DESC) RNK FROM ( SELECT * FROM (SELECT * FROM テーブルA WHERE SAGYO_NO = '01' UNION ALL SELECT * FROM テーブルB WHERE SAGYO_NO = '01') UNION ALL SELECT * FROM テーブルC WHERE SAGYO_NO = '01' ) U ) WHERE RNK=1;
その他の回答 (2)
- a_ka_
- ベストアンサー率16% (1/6)
No.1の方の回答に少し条件追加m(_ _)m select * from ( select rownum,A.* from ( --テーブルAのMAXの日付のレコード抽出 select SAGYO_DT,TANTO,NAIYO from テーブルA where SAGYO_DT in(select max(SAGYO_DT) from テーブルA) and SAGYO_NO = '01' union all --テーブルBのMAXの日付のレコード抽出 select SAGYO_DT,TANTO,NAIYO from テーブルB where SAGYO_DT in(select max(SAGYO_DT) from テーブルB) and SAGYO_NO = '01' union all --テーブルCのMAXの日付のレコード抽出 select SAGYO_DT,TANTO,NAIYO from テーブルC where SAGYO_DT in(select max(SAGYO_DT) from テーブルC) and SAGYO_NO = '01' ) A --降順で並び替え order by SAGYO_DT desc) where rownum = 1;
お礼
ありがとうございます。 参考になりました。
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 レスポンス的には微妙ですが・・・。 UNION して、 ORDER BY して、 ROWNUM = 1 ですかね・・・。
お礼
ありがとうございます。 参考になりました。
お礼
ありがとうございます。 参考になりました。