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 :

Afficher des les dix derniers destinataires


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 139
    Points : 65
    Points
    65
    Par défaut Afficher des les dix derniers destinataires
    Salut ,

    J'ai une table messages composée des champs suivants :

    (id, expediteur, destinataire, msg, dateAjout)

    Bref je voudrai afficher les 10 derniers destinataires d'un expéditeur précis bien sur et le problème c'est que quand je le fais ça m'affiche les doublons je ne sais pas comment y remédier !! pouvez vous m'aider svp ?

    Voila ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM `messages`
    WHERE expediteur = 3
    ORDER BY dateAjout DESC
    LIMIT 0 ,10
    Cordialement.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Je dirai qu'il suffit pour chaque destinataire de prendre la dernière date (et de supprimer l'* du Select !). Pour cela il y a déjà plusieurs discussions qui décrivent les différentes méthodes (jointure externe, not exists...).
    Ensuite un simple tri sur cette date, et c'est joué. Reste à voir si le limit se fait bien en dernier, donc après le tri.

    Tatayo.

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 139
    Points : 65
    Points
    65
    Par défaut
    Bonjour ,

    J'ai trouvé une petite solution qui a pu m'aider je la poste ici peut être que ça peut aider quelqu'un d'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
        destinataire,
        MAX(dateAjout) AS dateDernier
    FROM messages
    WHERE expediteur = 3
    GROUP BY destinataire
    ORDER BY dateDernier DESC
    LIMIT 0,10;

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Cette solution est propre à MySQmerde... Une solutuion générale ,qui fonctionne sur tous les SGBDR à l'exception de MySQLM... qui a 23 ans de retard en matière de SQL est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH T AS (
    SELECT destinataire, ROW_NUMBER() OVER(ORDER BY destinataire DESC) AS N
    FROM messages
    WHERE expediteur = 3
    )
    SELECT * FROM T WHERE N <= 10;
    On peut aussi utiliser le normatif ORDER BY destinataire DESC OFFSET FETCH 10 ROWS ONLY

    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/ * * * * *

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

Discussions similaires

  1. Afficher seulement les 5 derniere donnee
    Par fatmart dans le forum ASP
    Réponses: 1
    Dernier message: 19/04/2008, 01h20
  2. [Access] Afficher les deux derniers enregistrement
    Par badnane2 dans le forum Access
    Réponses: 10
    Dernier message: 08/07/2006, 14h02
  3. [VB.Net] Afficher les deux derniers enregistrement
    Par badnane2 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 07/07/2006, 19h54
  4. [MySQL] Afficher les 3 derniers enregistrements
    Par Wu dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/02/2006, 11h04
  5. Réponses: 10
    Dernier message: 28/05/2005, 11h19

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