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 Max Where Group by..


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut Select Max Where Group by..
    Bonjour

    Besoin urgent en lien avec un select, max, where, group by…. 

    Mais…je suis débutant en SQL

    Dans ma base j’ai quelque chose de ce type :
    ID / Nom / Prenom / Ville
    1 / NOMA / PrenomA / VilleA
    2 / NOMB / PrenomB / VilleB
    3 / NOMA / PrenomAA / VilleAA
    4 / NOMC / PrenomC / VilleC
    5 / NOMC / PrenomCC / VilleCC

    Je veux ressortir pour chaque valeur unique de « Nom », le prénom et la ville mais correspondant à l’ID maximum de chaque "Nom"

    Donc :
    2 / NOMB / PrenomB / VilleB
    3 / NOMA / PrenomAA / VilleAA
    5 / NOMC / PrenomCC / VilleCC

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 132
    Par défaut
    C'est une question qui revient très régulièrement.
    As-tu cherché dans ce forum des quesions équivalentes (la dernière facture, etc) ?
    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
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut
    Bonsoir
    Je parcours effectivement le forum mais je dois bien avouer que je ne trouve pas exactement ce que je cherche n'ayant pas de critère de recherche précis.
    Comme je ne connais pas la syntaxe cible ce n'est pas simple.
    Peut-être pourrais-tu me guider ?
    Dans l'intervalle je poursuis ma recherche d'aiguille dans la botte de foin

  4. #4
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut
    Je viens de trouver ce que tu me suggères..
    https://www.developpez.net/forums/d3...acture-client/
    Je creuse pour voir si cela répond à mon besoin.
    Merci

  5. #5
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut
    Pas exactement ce dont j'ai besoin car moi j'ai toutes les données dans la même table.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 200
    Par défaut
    Le fait d'avoir une seule table, ce n'est pas un problème en plus, c'est plutôt un problème en moins.
    Mais je ne pense pas que cette discussion soit la mieux pour ton cas.

    Recherche dans la doc Oracle les 'FONCTIONS ANALYTIQUES' ; tu vas trouver une trentaine de fonctions toutes plus intéressantes les unes que les autres. Et celle que tu cherches est dans cette liste.

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Un petit lien pour les fonctions analytiques : https://lalystar.developpez.com/fonctionsAnalytiques/

  8. #8
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select Max(Id) Id, Nom, Prenom, Ville
    From Matable
    Groupe By Nom, Prenom, Ville

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  9. #9
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Pas besoin des fonctions analytique pour ça (et on l'a dit autant de foi)
    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
     
    SQL> With data As (
      2    Select 1 Id, 'NOMA' Nom, 'PrenomA' Prenom,'VilleA' Ville from dual union all
      3    Select 2,'NOMB','PrenomB','VilleB' from dual union all
      4    Select 3,'NOMA','PrenomAA','VilleAA' from dual union all
      5    Select 4,'NOMC','PrenomC','VilleC' from dual union all
      6    Select 5,'NOMC','PrenomCC','VilleCC' from dual
      7  )
      8  Select Max(Id) Keep (Dense_Rank Last Order By Nom),
      9         Nom,
     10         Max(Prenom) Keep (Dense_Rank Last order By Nom),
     11         Max(Ville) Keep (Dense_Rank Last order By Nom)
     12    From Data
     13   Group By Nom
     14   Order By 1
     15  /
    MAX(ID)KEEP(DENSE_RANKLASTORDE NOM  MAX(PRENOM)KEEP(DENSE_RANKLAST MAX(VILLE)KEEP(DENSE_RANKLASTO
    ------------------------------ ---- ------------------------------ ------------------------------
                                 2 NOMB PrenomB                        VilleB
                                 3 NOMA PrenomAA                       VilleAA
                                 5 NOMC PrenomCC                       VilleCC

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ah non Mnitu, ça ne fonctionne pas ta requête (enfin ce n'est pas ce qui est demandé)

    J'ai changé le prénom de l'ID 1 en PrenomZ et en rajoutant un 3ème NOMA, et bien vu que tu fais un max(nom) order by nom, c'est le PrenomZ qui ressort, alors qu'il faut les données de l'ID max du nom (id=6 pour NOMA)
    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
    WITH DATA AS (
        SELECT 1 ID, 'NOMA' Nom, 'PrenomZ' Prenom,'VilleZZ' Ville FROM dual UNION ALL
        SELECT 2,'NOMB','PrenomB','VilleB' FROM dual UNION ALL
    SELECT 3,'NOMA','PrenomAA','VilleAA' FROM dual UNION ALL
    SELECT 6,'NOMA','PrenomCC','VilleCC' FROM dual UNION ALL
    SELECT 4,'NOMC','PrenomC','VilleC' FROM dual UNION ALL
    SELECT 5,'NOMC','PrenomCC','VilleCC' FROM dual
      )
    SELECT MAX(ID) KEEP (DENSE_RANK LAST ORDER BY Nom) ID, Nom, MAX(Prenom) KEEP (DENSE_RANK LAST ORDER BY nom) prenom, MAX(Ville) KEEP (DENSE_RANK LAST ORDER BY Nom) ville
    FROM DATA
    GROUP BY Nom
    ORDER BY nom
     
    ID	NOM	PRENOM	VILLE
    6	NOMA	PrenomZ	VilleZZ
    2	NOMB	PrenomB	VilleB
    5	NOMC	PrenomCC	VilleCC

    Bon, je croyais que les KEEP DENSE_RANK c'était des fonctions analytiques.. pas taper
    Edit : En fait je viens de vérifier, le FIRST et LAST sont bien dans le lien fonctions analytiques que j'ai posté

    Vu qu'il faut prendre les données de l'ID MAX, soit prendre le DENSE_RANK LAST order by ID , soit prendre le DENSE_RANK FIRST order by id desc
    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
    WITH DATA AS (
        SELECT 1 ID, 'NOMA' Nom, 'PrenomZ' Prenom,'VilleZZ' Ville FROM dual UNION ALL
        SELECT 2,'NOMB','PrenomB','VilleB' FROM dual UNION ALL
    SELECT 3,'NOMA','PrenomAA','VilleAA' FROM dual UNION ALL
    SELECT 6,'NOMA','PrenomCC','VilleCC' FROM dual UNION ALL
    SELECT 4,'NOMC','PrenomC','VilleC' FROM dual UNION ALL
    SELECT 5,'NOMC','PrenomCC','VilleCC' FROM dual
      )
    SELECT MAX(ID) ID, Nom, MAX(Prenom) KEEP (DENSE_RANK LAST ORDER BY ID) prenom, MAX(Ville) KEEP (DENSE_RANK FIRST ORDER BY ID desc) ville
    FROM DATA
    GROUP BY Nom
    ORDER BY nom
     
    ID	NOM	PRENOM	VILLE
    6	NOMA	PrenomCC	VilleCC
    2	NOMB	PrenomB	VilleB
    5	NOMC	PrenomCC	VilleCC

  11. #11
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par McM Voir le message
    Ah non Mnitu, ça ne fonctionne pas ta requête (enfin ce n'est pas ce qui est demandé)

    Edit : En fait je viens de vérifier, le FIRST et LAST sont bien dans le lien fonctions analytiques que j'ai posté

    Vu qu'il faut prendre les données de l'ID MAX, soit prendre le DENSE_RANK LAST order by ID , soit prendre le DENSE_RANK FIRST order by id desc

    Oui c'est bien par ID merci de votre correction.

    Non First et Last sont bien aussi des fonctions d'agrégation comme dans mon exemple
    FIRST and LAST are very similar functions. Both are aggregate and analytic functions that operate on a set of values from a set of rows that rank as the FIRST or LAST with respect to a given sorting specification. If only one row ranks as FIRST or LAST, then the aggregate operates on the set with only one element.
    Refer to FIRST for complete information on this function and for examples of its use.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/06/2014, 17h11
  2. Select max et GROUP BY
    Par mdimagho dans le forum Webi
    Réponses: 1
    Dernier message: 19/07/2013, 11h49
  3. Select max, group by et having
    Par Bram2 dans le forum Développement
    Réponses: 7
    Dernier message: 10/05/2010, 18h04
  4. Select sum(Poids) sur max(date) group by adr
    Par olibara dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/04/2009, 18h12
  5. Select Max Where
    Par guilld dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/12/2006, 09h50

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