dポイントプレゼントキャンペーン実施中!

はじめまして
当方、初心者で勉強の身です。ご回答頂けたら幸いです。

Oracle10gを使っています。

表1
カラムA(PK) CHAR型
カラムB(PK) CHAR型
カラムC(PK) CHAR型
カラムD(PK) CHAR型


A     B     C     D
---------------------------------
AUD   2012   1      30
AUD   2011   12     26
EUR   2010   7      1
EUR   2011   6     21
EUR   2012   5      1
JPY   2011   6     26
JPY   2011   12     25

というデータであれば


A     B     C     D
---------------------------------
AUD   2012   1      30
EUR   2012   5      1
JPY   2011   12     25


というデータを抽出したいと考えています。

具体的には、Aをキーにして、B(年)、C(月)、D(日)の年月日の最新日付を取りたいですが
どうすればよいでしょうか。

お手数をおかけしますが、よろしくお願い致します。

A 回答 (4件)

カラムB~カラムDがCHARなのがちと面倒ですね。



select カラムA, カラムB, カラムC, カラムD
from 表1
where
(カラムA, カラムB||right('0'||rtrim(カラムC), 2)||right('0'||rtrim(カラムD), 2))
in
(
 select カラムA, max(カラムB||right('0'||rtrim(カラムC), 2)||right('0'||rtrim(カラムD), 2))
 from 表1
 group by カラムA
)
/
ですかね
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
こちらのクエリで解決することができました。

お礼日時:2012/02/22 11:34

select A,B,C,C


from
( select *, row_number() over (partition by A order by to_number(B) desc ,to_number(C) desc, to_number(D) desc ) rn
from テーブル名 )
where rn = 1;

この回答への補足

ご回答ありがとうございます。
実行したところ、ORA-00904エラーとなってしまい
1行目のselectあとにABCDを指定できませんでした。
*で実行したところ

rn
--------------
1
1
1



という結果でした。

補足日時:2012/02/22 11:11
    • good
    • 0

手元にmysqlでのみ検証できるので試してみました。


oracleではsubstrをsubstrに副クエリのB,C,Dはto_number関数でくくる必要があります。

select A,
substring(F, 1, 4) B,
substring(F, 5, 2) * 1 C,
substring(F, 7, 2) * 1 D

from
(select A, max(E) F from
(select A , B * 10000 + C * 100 + D E from test.t1) T2
group by A) T3

なお、結果のC,Dは数字になっているので、必要に応じてto_charでくくってください
    • good
    • 0
この回答へのお礼

回答ありがとございました。

お礼日時:2012/02/22 11:41

SELECT A,B,C,D FROM テーブル名 WHERE


(A||B
||CASE LENGTH(RTRIM(C)) WHEN 1 THEN '0'||C ELSE C END
||CASE LENGTH(RTRIM(D)) WHEN 1 THEN '0'||D ELSE D END)
IN(SELECT A||MAX(B
||CASE LENGTH(RTRIM(C)) WHEN 1 THEN '0'||C ELSE C END
||CASE LENGTH(RTRIM(D)) WHEN 1 THEN '0'||D ELSE D END)
FROM テーブル名 GROUP BY A)
ORDER BY 1
はどうでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとございました。

お礼日時:2012/02/22 11:42

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

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