5 根据每组数据最后一条记录排名,选出排名第1的该组的所有记录

请教下,从上表中选出bb中每类数据最后一条排名前1所对应的所有记录?

attachments-2021-06-SpHUYSQf60c00c566192b.png

比如上面,a最后一条记录是1,b最后是4,b排第一,选出所有bb = `b的记录,需要分布实现还是可以一步完成?

取bb中分类最后一条记录对应aa值排第一的bb类的所有记录,有点绕哈;从上面这个表选的话,就是bb列,a类最后记录aa值是1,b是4,所以b排第一,选出所有bb 为 b的记录。


请先 登录 后评论

3 个回答

wale

先用context by与limit一起使用获取表中每个分组前n条记录或最后n条记录。

```

select * from t context by bb  limit -1

```

然后用atImax找出排名最大值所在的位置,然后返回bb中该位置对应的值

```

exec atImax(aa,bb) from (select * from t context by bb  limit -1)

```

示例代码如下:

```

t=table(5 2 1 4 as aa,`a`b`a`b as bb)

select * from t where bb=exec atImax(aa,bb) from (select * from t context by bb  limit -1)

```

attachments-2021-06-oX2qTuLv60c00fe570d1d.png

请先 登录 后评论
Sw

t=table(5 2 1 4 as aa,`a`b`a`b as bb)


select * from t where bb=exec atImax(aa,bb) from (select * from t context by bb  limit -1)


这个示例代码怎么出错啊?


localhost:8848 Server response: 'select * from t context by bb  limit -1 => Unrecognized column name bb '
请先 登录 后评论
Peter

结合 atImax 函数和嵌套查询可以实现,脚本如下:

t[t.bb == EXEC atImax(aa,bb) FROM (SELECT * FROM t CONTEXT BY bb LIMIT -1)]
请先 登录 后评论