アプリ版:「スタンプのみでお礼する」機能のリリースについて

テーブルA、B、Cとも共通して以下のカラムを持っています。
SAGYO_NO (VARCHAR)
SAGYO_DT(DATE型)
TANTO (VARCHAR)
NAIYO(VARCHAR)

SAGYO_NOを指定したA、B、Cのうちで(WHERE SAGYO_NO = '01')、
SAGYO_DTが最新のものの、
SAGYO_DT、TANTO、NAIYOを一回のSQLで取得したいのですが、
うまくできなくて困っています。
いい案がありましたらお願いします。

(例)
テーブルA
01 2011/03/01 AAA BBB
01 2011/03/08 CCC DDD

テーブルB
01 2011/03/05 EEE FFF

テーブルC
01 2011/03/02 GGG HHH

⇒上記の場合、テーブルAの'2011/03/08','CCC','DDD'を取得したいです。

よろしくお願いいたします。

A 回答 (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;
    • good
    • 1
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2011/03/02 14:27

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;
    • good
    • 1
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2011/03/02 14:27

こんばんは。



レスポンス的には微妙ですが・・・。
UNION
して、
ORDER BY
して、
ROWNUM = 1
ですかね・・・。
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2011/03/02 14:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す