[Oracle 8i - SQL] Rownum et Rank Over
Bonjour,
J'ai besoin donc d'émuler la fonction limit de mysql sous oracle. J'ai trouvé dans un ancien post sur ce forum l'utilisation de rank over mais ca fonctionne, comme c'est précisé, avec une colonne unique. Hors j'aurais besoin de créer une suite de liste trié sur des champs qui ne seront pas uniques.
Avec Rownum j'arrive aussi à mettre une limite haute au nombre d'enregistrements mais je n'arrive pas à obtenir les suivants. Si quelqu'un a un schéma de requete pour effectuer ca, je suis preneur, Merci.
Code:
SELECT * FROM ( SELECT SCOTT.EPRONET.*, RANK() OVER (ORDER BY epronet_date) a FROM SCOTT.EPRONET ) WHERE a BETWEEN 0 and 5 AND ROWNUM <= 5;
Re: [Oracle 8i - SQL] Rownum et Rank Over
Citation:
Envoyé par Ajrarn
J'ai trouvé dans un ancien post sur ce forum l'utilisation de rank over mais ca fonctionne, comme c'est précisé, avec une colonne unique.
non non on peut mettre plusieurs colonne
J'ai pas bien compris le but :oops:
Tu veux sélectionner du m-iéme au n-iéme enregistrement ? N'y aurait-il pas ton bonheur dans la FAQ : http://oracle.developpez.com/faq ;)
Re: [Oracle 8i - SQL] Rownum et Rank Over
Citation:
Envoyé par orafrance
non non on peut mettre plusieurs colonne
En fait j'ai repris un de tes messages :
Citation:
Envoyé par orafrance
Effectivement, de manière générique voila comment marche la requête :
Code:
1 2 3
| select * from (
select <colonnes à sélectionner>, RANK() OVER (order by <tuple unique : la PK en principe>) a from <ta table> )
where a between <borne inf> and <borne sup>; |
Et dans le over() tu précises bien tuple unique, je pensais pas pouvoir mettre deux champs.
Effectivement dans la faq y a! Je suis très confus, j'ai cherché seulement sur le forum :oops:
J'ai fait un truc de ce genre pour avoir un ordre by en meme temps
Code:
1 2 3 4 5 6 7
|
select * from (
select a.*, rownum rnum from (
SELECT SCOTT.EPRONET.* FROM SCOTT.EPRONET
ORDER BY EPRONET_TEXTE) a
where rownum <= 8 )
where rnum >= 4 |
En tout cas dsl pour le dérangement :( et surtout merci pour les reponses :), la prochaine fois je 8O un peu mieux
Re: [Oracle 8i - SQL] Rownum et Rank Over
Citation:
Envoyé par Ajrarn
Citation:
Envoyé par orafrance
Code:
1 2 3
| select * from (
select <colonnes à sélectionner>, RANK() OVER (order by <tuple unique : la PK en principe>) a from <ta table> )
where a between <borne inf> and <borne sup>; |
Et dans le over() tu précises bien tuple unique, je pensais pas pouvoir mettre deux champs.
D'accord, il y a une confusion ;)
Ce que j'appelle un tuple c'est un ensemble d'éléments :
un couple est un tuple de 2 éléments
un triplet est un tuple de 3 éléments
De fait, le tuple unique idéal serait la PK mais en aucun cas, tu es limité à une seule colonne ;)