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

Langage SQL Discussion :

selectionner la premiere valeur


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut selectionner la premiere valeur
    Bonjour

    j' ai une table qui contient 3 info(on va faire plus simple que en vrai.

    exemple de valeur :
    pk_parcelle | id_pc | superficie
    ___________________________
    3620 | 5119| 3500
    3621 | 5119| 10000
    3622 | 5100| 2000
    3623 | 5102| 3600
    3624 | 4589| 3500

    je veux recupéré le pk_parcelle correspondant à un id_pc donné(5119 dans l exmple) et dont la superficie est la plus grande.

    je dois donc avoir en retour la valeur : 3621

    pour cela, j'ai envisager plusieur requetes :

    SELECT pk_parcelle
    FROM PC_PARCELLES
    WHERE id_pc = 5119
    AND rownum<2
    ORDER BY superficie desc;

    celle la me renvoi bien l'information, mais selon un collegue, c'est un hazard. le ROWNUM etant fait avant le ORDER BY en theorie(cours SQL de delevoppez.com) j'ai tendance a abonder dans son sens.

    lorsque j'enleve le rownum, j'obtient : (en rajoutant les champ pour une meilleur visibilité)

    SELECT pk_parcelle,id_pc,superficie
    FROM PC_PARCELLES
    WHERE id_pc = 5119
    ORDER BY superficie desc;

    pk_parcelle | id_pc | superficie
    ___________________________
    3621 | 5119| 10000
    3620 | 5119| 3500
    3622 | 5100| 2000


    Comment pourrais je selectionner juste la premiere ligne(une sorte de limit )

    Merci
    pierre

  2. #2
    Membre expérimenté Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Par défaut
    Bonjour,

    si j'ai bien compris ceci doit marcher :

    select pk_parcelle,id_pc,max(superficie)
    FROM PC_PARCELLES
    WHERE id_pc = 5119
    group by pk_parcelle,id_pc

  3. #3
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    ca ne marche pas ;-)

    la commande max n'a pas l'air motivée pou m'aider...

    je bloque!!!

  4. #4
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Salut

    Tu utilises quel SGBD? Et ta colonne Superficie elle est de quel type?

    A++

  5. #5
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    dsl, j'ai oublier de préciser. je suis sous oracle 9.2(je croi que c'est cette version).

    superficie est de type : NUMBER(9,2)

  6. #6
    Membre expérimenté Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Par défaut
    Je suis surpris, ça n'affiche pas ce que tu veux ou il y a un message d'erreur ? si c'est un message d'erreur dis nous ce qui te dis.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Par défaut
    C'est a dire, ca te donne quoi?
    La requete de TheRussian me parait correcte.

  8. #8
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    hello,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select A.pk_parcelle,A.id_pc,A.superficie
    FROM PC_PARCELLES A
    WHERE A.id_pc = 5119 
         and A.superficie in 
         (select max (B.superficie)
                 from PC_PARCELLES B
          where B.id_pc = A.id_pc)

  9. #9
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    SQL> SELECT pk_parcelle,max(superficie)
    2 FROM PC_PARCELLES
    3 WHERE id_pc = 5119
    4 group by pk_parcelle,id_pc;

    PK_PARCELL | MAX(SUPERFICIE)
    ----------------| ---------------
    3620 18886
    3621 131592
    3622 2695

    Je ne comprend pas pkoi il change mon nom de variable...

  10. #10
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    And the winner is : lper

    merci a tous ;-)

  11. #11
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    Citation Envoyé par TheRussian
    Je suis surpris, ça n'affiche pas ce que tu veux ou il y a un message d'erreur ? si c'est un message d'erreur dis nous ce qui te dis.
    Je suis surpris que tu ne comprenne pas l'énoncé du problème, en effet ta requête retourne toutes les parcelles (pk_parcelle dans le group by), c'est l'erreur classique !

  12. #12
    Membre expérimenté Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Par défaut
    s'il n'y a que la parcelle qui t'interesse tu peux enlever le 'id_pc' dans le group by.
    Si tu veux toutes les zones, alors la requête de lper me semble la plus adaptée.

    [EDIT]

    lper >> tout à fait je m'en suis rendu compte en lisant ta requête.

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

Discussions similaires

  1. Selectionner les x premieres valeurs requêtes
    Par ALEXM dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/06/2007, 20h49
  2. Réponses: 10
    Dernier message: 20/01/2007, 11h20
  3. Selectionner la troisieme valeur à droite d'1 référence
    Par beurnoir dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/01/2006, 15h56
  4. [VBA-E]selectionner la premiere cellule non vide d'une ligne
    Par muse47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/10/2005, 08h11
  5. selectionner automatiquement plusieurs valeurs ds un select
    Par shadowR dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/09/2005, 16h00

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