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 :

Forcer select max() à ne retourner qu'un seule réponse


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Forcer select max() à ne retourner qu'un seule réponse
    Bonjour,

    J'ai une sous requête qui est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    where (Base3.Dat_evt20 = (select max(Dat_evt) from t_suivi risk20
    where Base3.num_cli = risk20.num_cli
    and Base3.num_aff = risk20.num_aff
    and Base3.mnt_ven20 is not null
    and risk20.cod_evt = 20)
    Malheureusement il arrive que cette requête renvoie plusieurs réponses, ce qui fausse l'ensemble de la requête.

    Il faut que que je force cette sous requête à ne renvoyer qu'un seule réponse.

    J'ai essayé des solutions comme "select top 1 max() "mais la syntaxe n'est pas correcte.

    Merci d'avance de votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 783
    Points
    30 783
    Par défaut
    Un SELECT MAX() sans clause GROUP BY ne peut retourner plus d'une ligne.
    Le probème est ailleurs.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Si bien sûr un select max peut retourner plusieurs lignes s'il y a plusieurs enregistrements qui ont ce max.

    Ce que je voudrais c'est n'en retourner qu'un !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 783
    Points
    30 783
    Par défaut
    J'ai une sous requête qui est la suivante: (...)
    Malheureusement il arrive que cette requête renvoie plusieurs réponses, ce qui fausse l'ensemble de la requête.
    Il faut que que je force cette sous requête à ne renvoyer qu'un seule réponse. (...)
    Le problème n'est pas celui-ci.
    La sous-requête ne retourne qu'une valeur pour les critères exprimés. En revanche la requête qui utilise cette sous-requête comme filtre peut retourner plusieurs lignes correspondant à cette valeur.

    Il faut maintenant identifier sur quel critère sera sélectionnée la ligne à retourner.
    J'ai essayé des solutions comme "select top 1 max() "mais la syntaxe n'est pas correcte.
    Pour utiliser TOP, il faudrait déjà savoir comment les lignes sont ordonnées...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Apilo Voir le message
    Si bien sûr un select max peut retourner plusieurs lignes s'il y a plusieurs enregistrements qui ont ce max.
    Non les fonctions d'agrégation, max, min, avg... ne renvoient qu'une seule valeur pour le(s) critère(s) de groupage, en l'absence de groupage, il n'y a qu'une seule réponse

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut seulement un enrégistrement and ROWNUM = 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    where (Base3.Dat_evt20 = (select max(Dat_evt) from t_suivi risk20
    where Base3.num_cli = risk20.num_cli
    and Base3.num_aff = risk20.num_aff
    and Base3.mnt_ven20 is not null
    and risk20.cod_evt = 20
    and ROWNUM = 1)

Discussions similaires

  1. [SQL Server] select max d'un count ?
    Par chess75 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 28/08/2017, 14h38
  2. [MySQL] requête select qui ne retourne qu'une seule ligne
    Par rose25 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/07/2009, 15h11
  3. [SQL Server] select max ne retourne pas la bonne valeur
    Par *alexandre* dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/09/2008, 14h49
  4. [Requête SQL / ODBC] Select x INTO ZedZedZed?
    Par Jean_Benoit dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 25/12/2006, 08h42
  5. [SQL] requete select max
    Par kabikou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 19/10/2005, 16h18

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