
Oracle11gで、以下のようなテーブルから、
「IDごとに、DTが最大のレコードのBUMONを1件ずつ取得」 したいです。
<テーブルTB>
ID DT BUMON
-------------
1 9/1 A
1 9/2 A
1 9/3 B ★Bを取得したい
2 9/4 C
2 9/5 C ★Cを取得したい
3 9/1 D
3 9/3 E
3 9/3 E ★Eを取得したい
<取得したいデータ>
BUMON
-------
B
C
E
<考えたSQL>
select
distinct A.BUMON
from
(select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) A,
(select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) B
where
A.ID = B.ID and
A.DT = B.MAXDT
;
上記のような方法を考えましたが、取得できますでしょうか?
現在、SQL実行環境がない場所にいるのですが、急ぎで確認したく、
どなたかお知恵を拝借できませんでしょうか??
また、可能であれば、★のレコード全体を取得するSQLもご教授いただきたく存じます。
<★のレコード全体を取得した結果>
ID DT BUMON
-------------
1 9/3 B
2 9/5 C
3 9/3 E
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
select ID, DT, BUMON
from (
select ID, DT, BUMON, row_number() over(partition by ID order by DT desc) rnum
from TB
)
where rnum = 1;
なんてのでもいいと思います。
No.1
- 回答日時:
ORACLE が手元に有りませんので、以下はPostgreSQLで確認しましたが、特にベンダの機能を使っていませんので大丈夫だと思います。
提示されているSQLのSELECT句を下記の様に変えるだけで、ご希望のものが取得できるかと。(MAX値のカラムも含まれますが・・・)
distinct A.BUMON
↓
distinct A.*
更に結合する片方のテーブルはサブクエリにする必要は無いので簡単に出来ます。
(select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) A,
↓
TB A,
更に INNER JOIN を使って書き直すことも出来ます。
select
distinct A.*
from
TB A INNER JOIN
(select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) B
ON(A.ID = B.ID AND A.DT = B.MAXDT)
;
別のアプローチとしては相関サブクエリを使って絞り込む方法も有ります。
select DISTINCT * from TB A
where not exists (select * from TB B where A.ID = B.ID and A.DT < B.DT)
;
参考URL:http://codezine.jp/article/detail/907
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
set lineで不要な改行が出力さ...
-
フィルターかけた後、重複を除...
-
数値が定期的にあらわれる文字...
-
アルファベットに付いて質問し...
-
差し込み後、元データを変更し...
-
Outlook 送受信エラー
-
JavaScriptの定数名が取り消し...
-
SQLで列名を変数にできないでし...
-
for whichの使い方
-
外部参照してるキーを主キーに...
-
英語ができる方、問題をお願い...
-
エクセルで最後の文字だけ置き...
-
リストビューの項目の内容を変...
-
誰か教えてください
-
バインド変数について
-
SQL文で、合計が0のレコードを...
-
UNI EN ISO 14001
-
エクセルの関数について教えて...
-
SELECT 文 GROUP での1件目を...
-
access2021 VBA メソッドまたは...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
set lineで不要な改行が出力さ...
-
SQL 複数のテーブルから重複な...
-
2つのselect文をunion all で...
-
仮想?テーブルの作成方法
-
select *, `人口(男)`AND`人口(...
-
SQLServerのストアドで戻り値取...
-
漢字表示の電話機
-
order by区の記述位置
-
Oracle:グループごとに最大日...
-
パラメータによってDistinctを...
-
MAX値を条件にしたSQLで困って...
-
Pro*cのバインド変数をカンマ区...
-
LAST_DAY関数は?
-
Access2000でディレクトリリス...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
for whichの使い方
-
特定の文字列で列を区切るには?
-
Outlook 送受信エラー
おすすめ情報