#1 20. 1. 2009 18:36

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Stránkování v Oracle pomocí ROWNUM

Ahoj, prosim proc nefunguje následující dotaz? Vrací 0 výsledků:

SELECT * FROM table WHERE ROWNUM BETWEEN 5 AND 50

a podobný dotaz s order by:

SELECT * FROM table WHERE ROWNUM BETWEEN 5 AND 50 ORDER BY ID

kdy se nejdrive vybere mnozina vysledku a ta se nasledne setridi. ja vsak potrebuji nejdrive setridit data a pak z nich vybrat deset vysledku. Jak to udelat?

Prosim o presunuti do sekce Oracle, ktera v tuto chvili jeste neni vytvorena…

Predem diky.

Offline

 

#2 21. 1. 2009 14:18

kosoj
Člen
Registrovaný: 21. 1. 2009
Příspěvky: 10

Re: Stránkování v Oracle pomocí ROWNUM

SELECT t.*
  FROM (SELECT t.*, RANK() OVER(ORDER BY t.id ASC) AS rank
          FROM table t) t
 WHERE t.rank BETWEEN 5 AND 50
 ORDER BY t.id;

Offline

 

#3 21. 1. 2009 14:47

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Stránkování v Oracle pomocí ROWNUM

tomu dotazu vubec nerozumim, k cemu je tam ten rank()?

Offline

 

#4 21. 1. 2009 15:14

kosoj
Člen
Registrovaný: 21. 1. 2009
Příspěvky: 10

Re: Stránkování v Oracle pomocí ROWNUM

RANK() je analytická funkce, která ti očísluje řádky dle zadaných kritérií. V tomto případě dle sloupce ID. Tady jsou nějaké příklady: http://www.oracle-base.com/…unctions.php

Offline

 

#5 21. 1. 2009 15:55

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Stránkování v Oracle pomocí ROWNUM

Diky mrknu na to

Offline

 

#6 22. 1. 2009 10:24

kosoj
Člen
Registrovaný: 21. 1. 2009
Příspěvky: 10

Re: Stránkování v Oracle pomocí ROWNUM

Ještě jsem si vzpoměl na funkci ROW_NUMBER(), což je v tomto případě vhodnější řešení, viz. http://www.adp-gmbh.ch/…_number.html. I když s RANK() přes ID to bude fungovat také.

SELECT t.*
  FROM (SELECT t.*, ROW_NUMBER() OVER(ORDER BY t.id ASC) AS row_number
          FROM table t) t
 WHERE t.row_number BETWEEN 5 AND 50
 ORDER BY t.id;

Offline

 

#7 27. 4. 2009 0:52

LeonardoCA
Člen
Místo: FM
Registrovaný: 12. 6. 2008
Příspěvky: 19

Re: Stránkování v Oracle pomocí ROWNUM

simon napsal(a):

Ahoj, prosim proc nefunguje následující dotaz? Vrací 0 výsledků:

SELECT * FROM table WHERE ROWNUM BETWEEN 5 AND 50

a podobný dotaz s order by:

SELECT * FROM table WHERE ROWNUM BETWEEN 5 AND 50 ORDER BY ID

kdy se nejdrive vybere mnozina vysledku a ta se nasledne setridi. ja vsak potrebuji nejdrive setridit data a pak z nich vybrat deset vysledku. Jak to udelat?

Prosim o presunuti do sekce Oracle, ktera v tuto chvili jeste neni vytvorena…

Predem diky.

Odpoved najdes tady: http://www.oracle.com/…6asktom.html

Offline

 

Zápatí