簡體   English   中英

DB2 Over子句出現問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM