[英]Problem with DB2 Over clause
我正在嘗試對一個非常舊的DB2版本進行分頁,而我可以確定選擇一系列行的唯一方法是使用OVER命令。
此查詢提供正確的結果(我要分頁的結果)。
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
如您所見,它確實選擇了前五行,但是顯然沒有選擇最新的行。
如果我在OVER()上添加Order By子句,它會更接近,但仍不完全正確。
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
確實很接近,但是第5個結果不正確(實際上是第6個結果)。
如何使此查詢正確無誤,以便可以按REFGROUPID分組,然后按REFID排序?
如果您將訂單放在父母的外面怎么辦?
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 ) AS t
WHERE t.rid BETWEEN 1 and 5 order by REFID desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.