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 :

Difficulté pour une requête a priori simple


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Points : 127
    Points
    127
    Par défaut Difficulté pour une requête a priori simple
    Bonjour à tous,



    Je suis en train d'implémenter un système de messagerie. Voici ma table :

    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
    22
    23
    24
    25
    CREATE TABLE messages (
     
      sender
        CHARACTER VARYING (15)
        NOT NULL,
     
      receiver
        CHARACTER VARYING (15)
        NOT NULL,
     
      text
        TEXT
        NOT NULL,
     
      date
        DATE
        DEFAULT CURRENT_DATE
        NOT NULL,
     
      time
        TIME WITH TIME ZONE
        DEFAULT CURRENT_TIME
        NOT NULL
     
    );
    Je souhaite simplement : afficher le dernier message envoyé par chaque expéditeur.

    - Le problème rencontré : je n'arrive à filtrer les doublons de mon jeu de résultats (vu qu'un expéditeur peut envoyer plusieurs messages).

    - J'ai essayé avec GROUP BY, mais je ne sais pas comment agréger la colonne "text" aux résultats.

    - Et un "DISTINCT ON (sender)" n'autorise pas les tris sur "date" et "time".

    Merci beaucoup pour votre aide ! (J'utilise PostgreSQL.)

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour si vous utilisez une version récente de PostegreSql vous pouvez utiliser les fonctions de fenêtrages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    WITH TMP AS (
    select sender, text, date, time, row_number() over(partition by sender order by date desc, time desc) as rnk
    from messages)
     
    select sender, text, date, time
    from tmp
    where rnk = 1
    Sinon vous pourriez peut-être remplacer vos colonne "date", et "time" par un timestamp... et n'appellez pas vos colonne avec des mots reservés à votre SGBD ça peut foutre le bordel.


    Enfin, niveau modélisation il y aurait peut-être des choses à revoir ..

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Points : 127
    Points
    127
    Par défaut
    Merci pour ton aide, punkoff !

    Je ne connaissais pas ces fonctions "window". C'est super !

    Bref, j'ai réussi à faire ce que je voulais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT sender, FIRST_VALUE(text) OVER (PARTITION BY sender ORDER BY timestamp DESC) AS text, MAX(timestamp) OVER (PARTITION BY sender) AS timestamp
     
    FROM mail.messages
     
    ORDER BY timestamp
    Bonne soirée et merci encore !



    P.S : Pour les mots clés, apparemment PostgreSQL autorise date, time, timestamp et text. Mais effectivement, ce n'est pas le cas de toutes les bases de données.

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

Discussions similaires

  1. Gros problèmes pour une requête pourtant simple
    Par VLorde dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/01/2015, 15h05
  2. Réponses: 6
    Dernier message: 13/07/2010, 10h18
  3. Difficulté pour une requête
    Par neotracks dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/05/2007, 10h59
  4. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38
  5. Difficulté à construire une requête
    Par coolcpu dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/10/2003, 00h43

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