Проблема с предложением DB2 Over - PullRequest
1 голос
/ 30 марта 2010

Я пытаюсь выполнить нумерацию страниц с очень старой версией 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

Как видите, он выбирает первые пять строк, но, очевидно, не выбирает последние.

Если я добавлю предложение 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

Это действительно близко, но 5-й результат неверен (фактически 6-й результат).

Как сделать этот запрос корректным, чтобы он мог группироваться по REFGROUPID, а затем упорядочивать по REFID?

1 Ответ

1 голос
/ 30 марта 2010

что делать, если вы поставили заказ на внешней стороне паренов?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...