假设我想重写以下聚合查询
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。不仅要获得最大(命中时间),还要获得第二,第三......答案 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