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

Requêtes MySQL Discussion :

requete : tri par date + groupement


Sujet :

Requêtes MySQL

  1. #1
    cbe
    cbe est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut requete : tri par date + groupement
    Bonjour,
    j'ai une table avec 4 champs :
    date; heure; ip; nom
    Les clés primaires sont date et heure.

    Il y a plusieures instances avec le meme "nom" mais avec des dates et/ou des heures différentes.
    Je souhaiterais afficher pour chaque "nom" différent l'instance la plus recente (date et heures les plus récentes).
    La db est hébergée par Free donc il y a certaines restricitons (My SQL 4.1.15)
    J'ai testé plusieures requêtes avec des GROUP BY, ORDER BY, DISTINC mais impossible de trouver une requete qui fonctionne. Avez vous une idée ?

    Merci d'avance

  2. #2
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Salut, as-tu essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT nom, max(date)
    FROM ta_table
    GROUP BY nom
    a+

  3. #3
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: requete : tri par date + groupement
    Ca doit être un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.*
    FROM tatable T1
    INNER JOIN tatable T2 ON (T1.nom=T2.nom)
    GROUP BY T1.nom
    HAVING ( ADDTIME(T1.date, T1.heure) = MAX(ADDTIME(T2.date, T2.heure)) )
    Pour des date et heure, t'aurais pu utilisé un type DATETIME plutôt que 2 champs distincts, non? (ça éviterait de faire des ADDTIME)

  4. #4
    cbe
    cbe est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses. Malheureusement les requetes ne retournent pas les infos que je souhaite.

    La requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT nom, max(time),`IP`
    FROM `maintenance ip` 
    GROUP BY nom
    Retourne bien la date la plus ressante pour chaque 'nom' différent, mais le champ IP ne correspond pas à la date retournée.

    la requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.* 
    FROM `maintenance ip`  T1 
    INNER JOIN `maintenance ip`  T2 ON (T1.nom=T2.nom) 
    GROUP BY T1.nom 
    HAVING ( T1.time) = MAX(T2.time )
    ne retourne que les champs corespondant à la date la plus recente. (j'ai utilisé un datetime pour remplacer les champs date et heure.)

    En fait la reqète imbriquée qui fonctionnerait bien serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.time, T1.IP, T1.date FROM 'mantenance ip' 
    WHERE T1.time IN
    (SELECT T2.max(time)
    FROM `maintenance ip` T2
    GROUP BY T2.nom)
    mais je n'arrive pas à trouver la jointure corespondante qui fonctionne.
    Je vais chercher des infos sur INNER JOIN, j'aurai peut être la solution.
    Si toutefois vous avez des idées, je suis toujours preneur.

    En attendant je vous remercie encore et vous souhaite une bonne année 2006.

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Je pense à une autre solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT T1.* 
     
    FROM `maintenance ip` T1 
    LEFT OUTER JOIN `maintenance ip` T2
    ON (T1.nom=T2.nom AND T1.time < T2.time) 
     
    WHERE T2.time IS NULL

  6. #6
    cbe
    cbe est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pcaboche, ton code fonctionne !

    J'ai aussi trouvé une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.*
    FROM `maintenance ip`  T1,
    (select max(`time`) AS M FROM `maintenance ip`  T2
    GROUP BY T2.nom) AS Md
    WHERE T1.`time`=M
    Je pensait que les requètes imbriqués ne fonctionnaient pas sous Mysql mais il suiffit d'utiliser des alias (avec AS) pour qu'elles fonctionnent.

    Merci à tous. Pb résolu

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Les requêtes imbriquées fonctionnent depuis la version 4.1, mais je préfère les éviter :
    1) pour des raisons de rétro-compatibilité avec les "vieilles" versions de MySQL (celles qu'on peut trouver chez certains hébergeurs comme free, ou même des hébergeurs payants)
    2) parce que les requêtes imbriquées sont souvent plus lentes que les requêtes classiques

  8. #8
    cbe
    cbe est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Tout à fait d'acord. Mais dans mon cas la performance et la compatibilité n'est pas un souci du tout.
    Merci pour toutes ces infos.

  9. #9
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Pour moi ça a de l'importance: si je décide d'écrire un article sur les fonctions de date/heure (ce qui est la cas maintenant, vu qu'il y a eu pas mal de questions sur ce sujet dernièrement), j'ai besoin de solutions si possible performantes mais surtout compatibles avec des versions anciennes de MySQL (pour répondre aux besoins du plus grand nombre).

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

Discussions similaires

  1. Requete group by et tri par date
    Par yaya_la_rafale dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/01/2011, 09h20
  2. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  3. tri par date
    Par Digiduck dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/06/2005, 21h51
  4. Réponses: 5
    Dernier message: 29/09/2004, 11h05
  5. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19

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