使用avg分析函数时,仅使用dense_rank检索一行

时间:2016-06-15 15:16:54

标签: sql

在使用avg函数时,我无法弄清楚每个dense_rank结果只能检索一行。它在某种程度上是结果的组合。

select 
         AVG(price) OVER(PARTITION BY hour) AS avg_price,
         dense_rank() over(order by hour)  as TheRank
         from table
         where transdate <= to_date('03032016', 'DDMMYYYY')

我的结果如下

avg_price    TheRank
10             1
10             1
12             2
12             2
15             3
15             3

我想要

avg_price    TheRank
10             1
12             2
15             3

希望有足够的信息来指导你。 提前谢谢,

克里斯

2 个答案:

答案 0 :(得分:0)

这是与dense_rank()&#34;之后&#34;:

的聚合
select AVG(price) as avg_price,
       dense_rank() over (order by AVG(price)) as TheRank
from table
where transdate <= date '2016-03-03' -- remove `date` if you are not using Oracle
group by hour;

这假定您希望按小时汇总,然后按价格按平均每小时排名。

答案 1 :(得分:0)

在论坛上搜索构建sample_date以提供更多信息后,我找到了我的解决方案

select 
         AVG(price) keep(dense_rank last order by PARTITION BY hour) AS avg_price
         from table
         where transdate <= to_date('03032016', 'DDMMYYYY')