ClickHouse 分组取出每组Top 几条数据 运用neighbor()函数
一般来说 分组SQL分组后取出每组的第N条 对于MySQL来说非常简单。直接使用row_number()over()函数就可以了但是clickhouse没有这个函数,那怎么办呢,我们可以运用neighbor()函数neighbor获取某一列前后相邻的数据,第一个参数为字段名,第二个参数控制前后相邻的距离示例1:SELECT a, neighbor( a,-1 ) from (SELECT ar
·
一般来说 分组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
更多推荐
已为社区贡献1条内容
所有评论(0)