IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[Oracle 8i - SQL] Rownum et Rank Over


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 24
    Points
    24
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ( SELECT SCOTT.EPRONET.*, RANK() OVER (ORDER BY epronet_date) a FROM SCOTT.EPRONET ) WHERE a BETWEEN 0 and 5 AND ROWNUM <= 5;

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Je ne suis pas sûr d'avoir bien compris ton pb mais tu peux très bien faire un RANK ordonné sur deux colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SQL> select x, y, rank() over(order by x, y) rnk 
      2  from   TEST;
     
             X          Y        RNK
    ---------- ---------- ----------
             1          1          1
             1          2          2
             1          3          3
             1          4          4
             2          1          5
             2          2          6
             2          3          7
             2          4          8
             3          1          9
             3          2         10
             3          3         11
             3          4         12
             4          1         13
             4          2         14
             4          3         15
             4          4         16

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut 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

    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

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 24
    Points
    24
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.


    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
    Effectivement dans la faq y a! Je suis très confus, j'ai cherché seulement sur le forum

    J'ai fait un truc de ce genre pour avoir un ordre by en meme temps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 un peu mieux

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut Re: [Oracle 8i - SQL] Rownum et Rank Over
    Citation Envoyé par Ajrarn
    Citation Envoyé par orafrance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 24
    Points
    24
    Par défaut
    Voui confusion de ma part, mais bon avec les 3 requetes imbriquées ca fonctionne bien donc je vais rester la dessus. Meri encore

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    de rien

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL SERVER 2K5] Update et Rank Over
    Par BenMarcel dans le forum Développement
    Réponses: 5
    Dernier message: 16/01/2013, 17h46
  2. pilotes odbc pour linux pour attaquer une BD oracle et sql S
    Par mloul dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 08/12/2004, 15h58
  3. Delphi -> Oracle : PL/SQL
    Par kribot dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/06/2004, 13h18
  4. portage oracle pl/SQL -> PostGreSQL
    Par luta dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/05/2004, 11h40
  5. PHP + Oracle + PL/ SQL
    Par bchristo dans le forum SQL
    Réponses: 12
    Dernier message: 28/04/2004, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo