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 :

Group by + Order by


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 35
    Points
    35
    Par défaut Group by + Order by
    Bonjour,

    Je suis confronté à un manque en SQL.

    Contexte :
    J'ai dans une table différentes colonnes dont id et date_ins.
    Le champ id représente l'id de l'enregistrement, et date_ins la date.

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ID     DATE_INS  
    ------  ---------- 
    4     17/05/2010 09:54:58
    5     11/05/2010 14:46:43
    6     13/05/2010 16:47:38
    4     18/05/2010 18:16:17
    Ce que je veux c'est sélectionner mes lignes en triant sur la date et en groupant uniquement sur l'ID (pour ne pas avoir de doublon).
    Je n'ai même pas besoin de sélectionner la date.

    Le résultat voulu serait :
    Le dernière essai, avec une requête imbriquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.ID
    FROM (SELECT *  FROM TABLE1 ORDER BY DATE_INS) AS T1
    GROUP BY T1.ID
    Mais là il ne me trie pas. Soit j'ai le tri, soit j'ai le groupement, mais jamais les deux en même temps !

    Merci d'avance,

  2. #2
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GROUP BY T1.ID
    ORDER BY T1.ID
    ça marche pas ça ??
    juva

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Votre requête est surtout mauvaise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT DISTINCT T1.ID
        FROM TABLE1
    ORDER BY DATE_INS ASC

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par juvamine Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GROUP BY T1.ID
    ORDER BY T1.ID
    ça marche pas ça ??
    juva
    Bonjour Juvamine,

    Et non car je souhaite trier sur la date, et non l'id.

    Citation Envoyé par Waldar Voir le message
    Votre requête est surtout mauvaise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT DISTINCT T1.ID
        FROM TABLE1
    ORDER BY DATE_INS ASC
    Et non plus. Je n'ai pas précisé je suis sous Access, et j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La clause ORDER BY est en conflit avec DISTINCT

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Oui je me suis trompé, on trie bien évidement sur la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT DISTINCT ID
        FROM TABLE1
    ORDER BY ID ASC

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Bonjour Waldar,

    Et non plus, car cet ID n'est pas primaire, c'est une clé étrangère.
    Et donc l'ordre ne correspond pas.

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Il y a une incohérence entre tes besoins exprimés :
    en groupant uniquement sur l'ID
    Et non car je souhaite trier sur la date, et non l'id.
    Si tu groupes sur l'ID, quelle date doit être retenue pour le classement ? La plus grande de chaque ID ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ID, MAX(DATE_INS) AS Date_ins_max
    FROM TABLE1
    GROUP BY ID
    ORDER BY MAX(DATE_INS)

  8. #8
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Sachant que tu ne souhaites conserver que l'id, je préconiserais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ID
    FROM TABLE1
    GROUP BY ID
    ORDER BY DATE_INS
    En décomposant, cette requête va trier toute la table par date puis ne prendre que les premières occurences de ID (après, l'optimisation de l'exécution ne fera peut-être pas les choses dans cet ordre mais l'idée est là).

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Chen norris Voir le message
    Sachant que tu ne souhaites conserver que l'id, je préconiserais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ID
    FROM TABLE1
    GROUP BY ID
    ORDER BY DATE_INS
    En décomposant, cette requête va trier toute la table par date puis ne prendre que les premières occurences de ID (après, l'optimisation de l'exécution ne fera peut-être pas les choses dans cet ordre mais l'idée est là).
    FAUX !
    La DATE_INS étant absente des colonnes du SELECT, le SGBD retiendra pour cette colonne la première valeur qu'il trouvera et qui ne sera pas forcément celle souhaitée pour le tri.

    Cette requête ne serait probablement pas acceptée par tous les SGBD, disons plus normatifs.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    FAUX !
    La DATE_INS étant absente des colonnes du SELECT, le SGBD retiendra pour cette colonne la première valeur qu'il trouvera et qui ne sera pas forcément celle souhaitée pour le tri.

    Cette requête ne serait probablement pas acceptée par tous les SGBD, disons plus normatifs.
    Exact !

    Citation Envoyé par CinePhil Voir le message
    Il y a une incohérence entre tes besoins exprimés :


    Si tu groupes sur l'ID, quelle date doit être retenue pour le classement ? La plus grande de chaque ID ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ID, MAX(DATE_INS) AS Date_ins_max
    FROM TABLE1
    GROUP BY ID
    ORDER BY MAX(DATE_INS)
    Et ceci fonctionne à la perfection, ce qui est extrèmement logique quand on décompose comme tu l'as fait par rapport à la date retenue.

    Merci beaucoup !

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

Discussions similaires

  1. requete Group By + Order By
    Par come18 dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/06/2008, 22h39
  2. [SQL] count & group avec order étrange ?
    Par rduvrac dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/04/2008, 02h30
  3. Petit problème SQL (GROUP BY|ORDER BY)
    Par kalash_jako dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/04/2007, 23h17
  4. group by - order by
    Par romstarr dans le forum Oracle
    Réponses: 14
    Dernier message: 21/02/2007, 15h02
  5. [Access] Requète SQL Group By, Order By and Co
    Par zoidy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/06/2006, 14h37

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