oracleのkeepのdense_rankってmaxだっけ?

はい、ちょっと疑問に思ったので、簡単なSQLを書いてみました。

select
max(key) keep (dense_rank first order by dat) as max_key
, min(key) keep (dense_rank first order by dat) as min_key
, max(key) keep (dense_rank first order by dat desc) as max_desc_key
, min(key) keep (dense_rank first order by dat desc) as min_desc_key
from (
select 'a' as key, 1 as dat from dual
union
select 'b' as key, 2 as dat from dual
)

これ、結果はこんな感じ。

|MAX_KEY|MIN_KEY|MAX_DESC_KEY|MIN_DESC_KEY|
|-------|-------|------------|------------|
|a|a|b|b|

要するに、maxでもminでも先に優先順位で集約されているから同じっぽい。
sおの優先順位で集約する部分にdescって書くと優先順位が逆転するから、結果はbになる。

結論から言うと、keepでdense_rank使うときはmaxでもminでもどっちでも良さそう。

ただ、この辺は全然詳しくないので、詳しい人がいたら教えてください。