在sql窗口函数中限制结果集

时间:2013-11-23 10:19:26

标签: sql aggregate-functions

假设我想重写以下聚合查询

select id, max(hittime)
from status
group by id

使用聚合窗口函数,如

select id, max(hittime) over(partition by id order by hittime desc) from status

我如何指定,我只对分区中的第一个结果感兴趣?

编辑:我当时认为可能有[RANGE | ROWS] BETWEEN frame_start和frame_end。不仅要获得最大(命中时间),还要获得第二,第三......

2 个答案:

答案 0 :(得分:4)

我认为你需要的是一个排名函数,ROW_NUMBER或DENSE_RANK,取决于你想如何处理关系。

select id, hittime
from (
     select id, hittime,
            dense_rank() over(partition by id order by hittime desc) as ranking
     from status
     ) as x
where ranking = 1;  --to get max hittime
--where ranking <=2;  --max and second largest

答案 1 :(得分:1)

使用不同的陈述。

select DISTINCT id, max(hittime) over(partition by id order by hittime desc) from status