Sybase ASE 16.0分组取每组前N条数据的实现方案咨询
在Sybase ASE 16.0中获取每个ID的前5条Sequence数据
由于Sybase ASE 16.0不支持RANK()/PARTITION BY这类窗口函数,你可以通过自关联的方式实现需求。
现有SQL分析
你写的查询语句是用来计算每条记录在同ID组内的倒序排名(myrank统计的是同ID下sequence值比当前记录大的条数),但缺少前5条的过滤逻辑,无法直接得到预期结果。
修正后的SQL语句
要获取每个ID对应的前5条sequence数据,调整子查询的统计逻辑并添加过滤条件即可:
SELECT t1.id, t1.sequence FROM sysprocedures t1 WHERE (SELECT COUNT(*) FROM sysprocedures t2 WHERE t2.id = t1.id AND t2.sequence <= t1.sequence) <= 5 ORDER BY t1.id, t1.sequence;
逻辑说明
- 子查询统计同ID下sequence小于等于当前记录sequence的条数,这个数值就是当前记录在同ID组内的正序排名(比如sequence=1的记录排名为1,sequence=2的排名为2,以此类推)。
- 通过
WHERE 子查询结果 <=5,筛选出每个ID组内排名前5的记录。 - 最后按
id和sequence排序,即可得到和预期一致的输出。
内容的提问来源于stack exchange,提问作者asb
相关产品推荐
相关产品推荐

