1
我正在尝试使用DB2的一个非常旧的版本进行分页,我唯一能找出选择一系列行的方法是使用OVER命令。DB2 Over clause问题
此查询提供了正确的结果(我想分页的结果)。
select MIN(REFID) as REFID, REFGROUPID from ARMS_REFERRAL where REFERRAL_ID<>'Draft' and REFERRAL_ID not like 'Demo%' group by REFGROUPID order by REFID desc
结果:
REFID REFGROUPID
302 242
301 241
281 221
261 201
225 142
221 161
... ...
SELECT * FROM (SELECT row_number() OVER() AS rid, MIN(REFID) AS REFID, REFGROUPID FROM arms_referral where REFERRAL_ID<>'Draft' and REFERRAL_ID not like 'Demo%' group by REFGROUPID order by REFID desc) AS t WHERE t.rid BETWEEN 1 and 5
结果:
REFID REFGROUPID
26 12
22 11
14 8
11 7
6 4
正如你所看到的,但它选择了第5行,但它显然不是选择最新的。
如果我将一个Order By子句添加到OVER(),它会变得更近,但仍然不完全正确。
SELECT * FROM (SELECT row_number() OVER (ORDER BY REFGROUPID desc) AS rid, MIN(REFID) AS REFID, REFGROUPID FROM arms_referral where REFERRAL_ID<>'Draft' and REFERRAL_ID not like 'Demo%' group by REFGROUPID order by REFID desc) AS t WHERE t.rid BETWEEN 1 and 5
REFID REFGROUPID
302 242
301 241
281 221
261 201
221 161
它真的很接近但第五个结果不正确(实际上是第六个结果)。
如何使此查询正确,以便它可以通过REFGROUPID进行分组,然后通过REFID进行排序?