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

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 ] 在 frame_start 和 frame_end 之间。不仅要获得 max(hittime) 还要获得第二、第三...

最佳答案

我认为您需要的是一个排名函数,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

关于sql - 限制sql窗口函数中的结果集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20161109/

10-10 13:14