![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
はじめまして
当方、初心者で勉強の身です。ご回答頂けたら幸いです。
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(日)の年月日の最新日付を取りたいですが
どうすればよいでしょうか。
お手数をおかけしますが、よろしくお願い致します。
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
)
/
ですかね
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;
この回答への補足
ご回答ありがとうございます。
実行したところ、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でくくってください
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
はどうでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- FX・外国為替取引 FXの下落について教えてください。 3 2022/06/15 17:52
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- Oracle データベースのカラムの型がCHAR型の場合で 値にシングルコーテーションつけなくても動作する場合と数 3 2022/04/25 12:00
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- FX・外国為替取引 EURやCHF、GBPの動きはどのようにドル円に響きますか? 1 2022/06/18 13:12
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
- その他(プログラミング・Web制作) Python pandasについての質問です。 日付 名前 ◯月◯日 佐藤 ・ 伊藤 ・ 山田 ・ 2 2022/06/13 17:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQLでSUMなどの関数でデータが...
-
OracleのSQLで同テーブルのカラ...
-
ROWNUMでUPDATEをしたいのです...
-
SQL*LoaderでCSVから指定した列...
-
日付の古い順番に削除したいの...
-
特定のカラムが更新されたとき...
-
UPDATE文
-
SQL 不要な文字列を削除したい
-
複数テーブルを結合するには?
-
半角英数文字の抽出がしたい。
-
SQL(oracle)でご助言いただきた...
-
ワークテーブルって何?
-
PLSQLのバインド変数の件です。
-
sqlplusで表示が変なので、出力...
-
SQLについて教えて下さい。 主...
-
SQLで違うテーブルの値を比較し...
-
SQL、2つのテーブルで条件一致...
-
文字列分割
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQL、2つのテーブルで条件一致...
-
ROWNUMでUPDATEをしたいのです...
-
sqlplusで表示が変なので、出力...
-
SQL*LoaderでCSVから指定した列...
-
SQLでSUMなどの関数でデータが...
-
SQL 複数テーブルのupdate
-
UPDATE文
-
件数とデータを同時に取得する...
-
特定のカラムが更新されたとき...
-
OracleのSQLで同テーブルのカラ...
-
カラム位置変更
-
SQLで違うテーブルの値を比較し...
-
LONG型の先頭250バイトを Varch...
-
PLSQLのNumber型の初期化
-
数値をNUMBER型にするかCHAR型...
-
半角英数文字の抽出がしたい。
-
DELETE文とロックについて
-
SQL(oracle)でご助言いただきた...
おすすめ情報