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

SQL Oracle Discussion :

SELECT RANK() rk:


Sujet :

SQL Oracle

  1. #1
    Membre éclairé Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par défaut SELECT RANK() rk:
    Bonjour,

    Je souhaite extraire les empno de rang 5 suite à la requete suivante:

    select
    e.empno
    , e.hiredate
    , rank() over ( partition by e.hiredate order by e.empno ) rk
    from jbm_emp e
    where e.empno between 1422 and 1430
    order by e.empno
    Mais si j'ajoute au prédicat
    .
    rk = 5

    j'ai le message d'erreur:

    "La commande SQL ne se termine pas correctement".

    Pourtant dans cet exemple:

    http://www.adp-gmbh.ch/ora/sql/analytical/rank.html

    il paraît possible de le faire.

    Merci pour votre aide.

  2. #2
    Membre confirmé Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Par défaut
    Bonjour,

    je crois que tu ne peux pas utiliser l'alias directement dans la clause where
    essaye plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    select * from (select
    e.empno
    , e.hiredate
    , rank() over ( partition by e.hiredate order by e.empno ) rk
    from jbm_emp e
    where e.empno between 1422 and 1430
    order by e.empno)
     where rk = 5;
    Edit : Pour info l'exemple de ton lien est écrit de la même façon, mais je t'accorde que l'indentation est trompeuse.

  3. #3
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Petite explication supplémentaire :
    Dans une requête, les fonctions analytiques sont toujours évaluées en dernier.
    C'est à dire que tu fais d'abord tes jointures, ton filtre, ton group by...

    Ce qui change beaucoup de choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE e.empno BETWEEN 1422 AND 1430
    Ton rank est bien calculé sur la plage que tu imposes. Si tu souhaites numéroter sur toute la table, puis garder les empno de la fourchette, il faut encore faire une sur requete.

    Et donc pour ton exemple, tu ne peux utiliser le rank dans le where pour la bonne et simple raison qu'il n'a pas encore été évalué

  4. #4
    Membre éclairé Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par défaut
    Bonjour,

    J'ai essayé des requêtes soit avec RANK soit avec le ROWNUM en dernier dans une inline view, mais c'est toujours identique.

    Finalement j'ai écrit une fonction qui retourne une valeur si on lui passe le rang souhaité, et là ça marche.

    Merci pour les réponses pacman et gaboo_bl

    JBM

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [VB6] [Crystal] Selection enregistrement
    Par littlecow dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/01/2005, 13h08
  3. SELECT
    Par Thomad dans le forum SQL
    Réponses: 2
    Dernier message: 13/03/2003, 20h56
  4. TEdit : selection du texte et autre fonction
    Par Odulo dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/08/2002, 14h27
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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