一尘不染

限制在SQL窗口函数中设置的结果

sql

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

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

使用像

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

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

编辑:我当时在想[RANGE | [行]在frame_start和frame_end之间。不仅可以获得max(hittime),还可以获得第二,第三…


阅读 167

收藏
2021-05-30

共1个答案

一尘不染

我认为您需要的是排名功能,取决于您处理领带的方式,可以是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
2021-05-30