• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ORACLE SQL 複数項目の最大抽出)

ORACLE SQLで複数項目の最大抽出方法

このQ&Aのポイント
  • Oracle 10gを使用している場合、特定の条件で複数の項目の最大値を抽出する方法を知りたいです。
  • 例えば、データテーブルの複数の項目の中から、キーとなる項目の値が最大であるレコードを取得したい場合、どのようなSQLを使えば良いでしょうか。
  • 具体的な例として、A列をキーとして、B列(年)、C列(月)、D列(日)の値が最新のレコードを抽出したいと思っています。どのようなクエリを使用すれば良いでしょうか。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

カラム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 ) / ですかね

c_gen
質問者

お礼

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

その他の回答 (3)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.4

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;

c_gen
質問者

補足

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

回答No.3

手元に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でくくってください

c_gen
質問者

お礼

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

回答No.2

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 はどうでしょうか。

c_gen
質問者

お礼

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

関連するQ&A