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 PostgreSQL Discussion :

Requête retournant la dernière ligne d'une table annexe [9.5]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut Requête retournant la dernière ligne d'une table annexe
    Bonjour,

    j'ai une question suite à un petit soucis pour l'écriture d'une requête.
    Voici les données :

    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
    Table ligne :
    +----+-----------+
    | id | reference |
    +----+-----------+
    |  1 | AAAA      |
    |  2 | BBBB      |
    |  3 | CCCC      |
    +----+-----------+
     
    Table histo_reponse :
    +----+----------+------------+-------------+
    | id | id_ligne | id_reponse | date_insert |
    +----+----------+------------+-------------+
    |  1 |        1 |          1 | 2016-11-15  |
    |  2 |        1 |          2 | 2016-11-22  |
    |  3 |        1 |          3 | 2016-12-01  |
    |  4 |        3 |          1 | 2016-11-25  |
    |  5 |        3 |          2 | 2016-12-02  |
    +----+----------+------------+-------------+
    Ce que je cherche à faire (sans succès pour le moment) :

    Afficher toutes les enregistrements de la table "ligne" avec la dernière réponse trouvée dans la table "histo_reponse"
    Le résultat voulu serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +-----------+------------+-------------+
    | reference | id_reponse | date_insert |
    +-----------+------------+-------------+
    | AAAA      |          3 |  2016-12-01 |
    | BBBB      |       null |        null |
    | CCCC      |          2 |  2016-12-02 |
    +-----------+------------+-------------+
    Le problème c'est que je ne vois pas comment écrire la requête pour qu'ilne prenne que la ligne avec la date la plus grande présente dans la table "histo_reponse"
    Une idée ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH 
    A AS 
    (
    SELECT L.*, MAX(date_insert) OVER(PARTITION BY L.id) AS MD
    FROM   ligne AS L
           LEFT OUTER JOIN histo_reponse AS HR
                 ON L.id = HR.id_ligne
    )
    SELECT reference, id AS id_reference, date_insert
    FROM   A
    WHERE  date_insert = MD
    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/ * * * * *

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut
    Merci pour ta réponse. J'ai apporté une petite modif à ta requête sinon ça ne fonctionne pas (ou presque) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH a AS
        (
            SELECT l.*, MAX(date_insert) OVER(PARTITION BY l.id) AS md, date_insert, id_reponse
            FROM   test.ligne AS l
                LEFT OUTER JOIN test.histo_reponse AS hr ON l.id = hr.id_ligne
        )
    SELECT reference, id_reponse, md
    FROM   a
    WHERE  date_insert = md OR date_insert IS NULL;

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

Discussions similaires

  1. Dernière ligne d'une table
    Par geofnich dans le forum SAS Base
    Réponses: 2
    Dernier message: 10/05/2010, 16h26
  2. Réponses: 2
    Dernier message: 08/09/2009, 11h57
  3. Dernière ligne ajoutée à une table + mise à jour
    Par belsuncette dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/10/2007, 12h25
  4. [MySQL] Sélection des dernières lignes d'une table
    Par Civet dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/04/2007, 15h06
  5. Réponses: 6
    Dernier message: 09/06/2006, 18h22

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