​ 一般来说 分组SQL分组后取出每组的第N条 对于MySQL来说非常简单。直接使用row_number()over()函数就可以了

​ 但是clickhouse没有这个函数,那怎么办呢,我们可以运用neighbor()函数

neighbor

  • 获取某一列前后相邻的数据,第一个参数为字段名,第二个参数控制前后相邻的距离
  • 示例1:
SELECT a, neighbor( a,-1 ) from (SELECT arrayJoin( [1,2,3,6,34,3,11] ) as a,'u' as  b)  

比如我们需要查找前根据id字段分组的前5条数据

select * from(
select desc ,rvalue ,rtime from (
select *,case
when neighbor(id,-5) = name  //用case判断 当前5个数据id相同时,即为同一组,添加remark字段设为5
 then 5 else 1 
end remark
from 
(
		XXXXX
)
  order by id ,time desc
    )
    where remark<5 当remark小于5即为同一组中的前5条数据
    order by id ,time desc
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐