![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
SELECT 文 GROUP での1件目を取得
SQL Server
-
キーが同じを複数行を1行にまとめるには?
Oracle
-
SELECTで1件のみ取得するには?
Oracle
-
-
4
group byで最後のレコードを抽出したい
MySQL
-
5
[SQL]重複内容を持つデータから1件抽出かつ複数のカラムを表示したい
その他(データベース)
-
6
oracle sqlで先頭の1件を取得
Oracle
-
7
複数テーブルのMAX値の行データを取得したい
Oracle
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
select *, `人口(男)`AND`人口(...
-
同一テーブル内のデータを比較...
-
2つのselect文をunion all で...
-
ブルースクリーンの対処法
-
ブルースクリーンの対処法
-
SQLで小数点のついたべき乗を計...
-
SQL 複数のテーブルから重複な...
-
エクセルVBAコードで教えて下さ...
-
差し込み後、元データを変更し...
-
止まなーい雨はない でもお前に...
-
フィルターかけた後、重複を除...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
1、Rstudioで回帰直線を求める...
-
列のヘッダーを含めるのをデフ...
-
エクセルで最後の文字だけ置き...
-
SQLで特定の項目の重複のみを排...
-
カーソル0件の時にエラーを発生...
-
SQL文で、合計が0のレコードを...
-
EXISTSを使ったDELETE文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL 複数のテーブルから重複な...
-
select *, `人口(男)`AND`人口(...
-
Oracle:グループごとに最大日...
-
2つのselect文をunion all で...
-
MAX値を条件にしたSQLで困って...
-
アクセス SQLで重複排除でcount...
-
SQLServerのストアドで戻り値取...
-
同一テーブル内のデータを比較...
-
order by区の記述位置
-
set lineで不要な改行が出力さ...
-
LAST_DAY関数は?
-
ブルースクリーンの対処法
-
Accessで2つのカラムからユニー...
-
ブルースクリーンの対処法
-
Pro*cのバインド変数をカンマ区...
-
SQLで小数点のついたべき乗を計...
-
DATEADD 関数の引数の省略形の...
-
1つのカラムに複数レコードの...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
おすすめ情報