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 :

Sélection de la dernière info saisie pour chaque utilisateur


Sujet :

Langage SQL

  1. #1
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut Sélection de la dernière info saisie pour chaque utilisateur
    Bonjour,

    J'ai une table : date/info/utilisateur.

    Je voudrais sélectionner, pour chaque utilisateur, l'enregistrement ayant la date la plus récente.

    Y a t'il une solution sans faire de sous requête ?

    Sans sous-requête, un group by utilisateur me permettrait de choisir max (date) : mais alors comment récupérer, pour l'enregistrement correspondant à cette max(date), les valeurs des autres champs ?

    J'ai par exemple pensé à limit (je suis sur mysql), mais il me faudrait un limit par groupe et non pas un limit sur tout le résultat.

    Bonne journée

    Phil

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Etudiez la clause HAVING , elle devrait repondre a votre besoin

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  3. #3
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci,

    Je m'y jette...

    Phil

  4. #4
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Alors là, je vois pas. Having porte sur le groupe. Comment celà peut il solutionner mon cas ?

    A plus

  5. #5
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM matable
    WHERE 
       .... 
    HAVING madate=MAX(madate)
    evitez d'utiliser des mots clés dans la définition de vos colonnes (date par exemple), cela pourrait vous poser de serieux problemes.

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  6. #6
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    a) bien reçu le conseil concernant les mots clé
    b) Si je fais HAVING madate=MAX(madate), mon résultat est vide
    c) Si je fais la même chose + un group by sur l'utilisateur, mon select élimine tous les utilisateurs pour lesquels j'ai au moins 2 tuples.

    Je suis perplexe.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT utilisateur, info
    FROM T_Table
    WHERE ColonneDate = (	SELECT MAX(T1.ColonneDate) 
    			FROM T_Table T1 
    			WHERE T1.Utilisateur = T_Table.Utilisateur
    		)
    Attention, si vous avez plusieurs lignes avec une même date max pour un même utilisateur, vous les retrouvez dans le résultat de la requête.

  8. #8
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Pgs Voir le message
    a) bien reçu le conseil concernant les mots clé
    b) Si je fais HAVING madate=MAX(madate), mon résultat est vide
    c) Si je fais la même chose + un group by sur l'utilisateur, mon select élimine tous les utilisateurs pour lesquels j'ai au moins 2 tuples.

    Je suis perplexe.
    Le SGBD, la version,un jeu d'essais et la requete pourraient aider...
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  9. #9
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    à Yanika_bzh : merci. Je vais me faire une mini table test pour voir si j'ai les mêmes pb.


    à vmolines : merci. Mais ne crois tu pas qu'un select dans une condition risque d'être un peu lourd (car recalculé à chaque tuple soumis à condition) ?P.S. Je suis aussi de Mtp ;-)

    Phil

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Et bien quand tu auras une requête différente de celle que j'ai proposée qui satisfait ton problème, tu la mettras ici, j'y jetterai un oeil.

    Bonne réflexion

  11. #11
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Il n'y avait rien de dédaigneux dans mon message.

    Merci pour ton aide.

    Bonne journée.

    Phil

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    à vmolines : merci. Mais ne crois tu pas qu'un select dans une condition risque d'être un peu lourd (car recalculé à chaque tuple soumis à condition) ?P.S. Je suis aussi de Mtp ;-)
    Non, SQL est fait pour cela... Il suffit de penser à poser les bon index.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Dernière valeur date pour chaque id
    Par IronRabbit dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/12/2014, 11h56
  2. Dernière colonne remplie pour chaque ligne
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/05/2009, 12h28
  3. Réponses: 7
    Dernier message: 29/02/2008, 19h23
  4. Sélectionner la dernière date entrée pour chaque enregistrement
    Par Cindy m dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2007, 15h11
  5. [Requête] faire la somme des max pour chaque utilisateur
    Par novices dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2007, 11h45

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