例えば、以下の様なテーブルがあったとします。
データNO 履歴番号 データ
1 1 aaa
1 2 aaa+
2 1 bbb
3 1 ccc
3 2 ccc+
3 3 ccc++
このテーブルから、各データNOで履歴番号が最大のレコードのみを取得するために、
分析関数で最大履歴番号を取得して、履歴番号が最大履歴番号と等しいという条件をかけるためには、
以下の様なかたちでサブクエリを利用するのがひとつの方法だと思います。
select *
from (
select データNO
, 履歴番号
, max(履歴番号) over( partition by データNO ) as 最大履歴番号
, データ
from テーブル
)
where 履歴番号 = 最大履歴番号
しかし分析関数で得た項目に条件をかけるだけのためにサブクエリを使うというのは、スマートではないように感じます。
group by に対する having のように、分析関数で得た結果に対して条件をかけるための書き方は存在しないのでしょうか?
コメント(0件)