Oracle 分析窗口函数

Posted

技术标签:

【中文标题】Oracle 分析窗口函数【英文标题】:Oracle Analytics Window Function 【发布时间】:2016-04-20 01:19:45 【问题描述】:

如果我有这样的数据:

MyDate    LEVEL
01JAN2016 5.1
02JAN2016 6.2
03JAN2016 8.0
04JAN2016 5.8

如何使用窗口函数返回***别的日期? 我在想:

SELECT max(MyDate) over (ORDER BY LEVEL) FROM x

...但它似乎不起作用。我尝试使用 PARTITION BY 但仍然没有运气。我真的想要 max(LEVEL)。

【问题讨论】:

【参考方案1】:
select mydate, level
from (select mydate, level, row_number() over (order by level desc) rn from x)
where rn = 1

【讨论】:

【参考方案2】:

如果你真的想使用花哨的功能。 . .

select max(date) keep (dense_rank first order by level desc)
from x;

但是,很多人会写:

select x.*
from (select x.*
      from x
      order by level desc
     ) x
where rownum = 1;

【讨论】:

大声笑-猜得好! :-) 我在看到你的帖子后编辑添加了“desc” - 我在问题的第一次阅读中错过了它。

以上是关于Oracle 分析窗口函数的主要内容,如果未能解决你的问题,请参考以下文章

Oracle分析函数

Oracle分析函数列表分享

MySQL 8.0 新增SQL语法对窗口函数和CTE的支持

MySql窗口函数

Hive碎碎念(2):分析函数和窗口函数

Hive分析函数LAG和LEAD详解