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 et SQL. Discussion :

Requête avec dernier enregistrement d'une table en lien avec une autre [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut Requête avec dernier enregistrement d'une table en lien avec une autre
    Bonjour à tous,


    Je rencontre une petite difficulté dont voici un exemple (mon projet est plus compliqué mais l'exemple va bien je pense) :

    Une table T_Clients et une table T_Factures (dont un champs date) en relation 1 à plusieurs (donc un client peut avoir plusieurs factures)
    Une requête sur T_Clients et T_Factures en même temps (dont toujours ce champs date).

    La requête va me retourner des résultats avec plusieurs fois le même client si ces derniers ont plusieurs factures, ce que je ne souhaite pas justement...
    Comment demander de ne sortir qu'une seule fois les clients avec la dernière date de T_Factures connu?


    Merci d'avance.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    Bonjour,
    Par exemple avec une requete "group by" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select c.*, max(date_fac) from clients c left join factures f on c.numcli=f.numcli group by ... (liste des champs affichés)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bonjour Merci pour ton aide, hélas quelque chose ne semble pas fonctionner, voici ma requête complète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Max(T_Demarche.Date) AS MaxDeDate, T_Demarche.ID_Prospect, T_Demarche.Nom_Contact, T_Demarche.Type, T_Demarche.Reponse, T_Prospects.No_Demarche, T_Prospects.Localite, T_Prospects.Nom
    FROM T_Prospects INNER JOIN T_Demarche ON T_Prospects.[] = T_Demarche.[ID_Prospect]
    GROUP BY T_Demarche.ID_Prospect, T_Demarche.Nom_Contact, T_Demarche.Type, T_Demarche.Reponse, T_Prospects.No_Demarche, T_Prospects.Localite, T_Prospects.Nom;
    Et la requête me retourne tous les résultats (donc ce que je ne veux pas).

    Par contre pour info, si je fais juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(T_Demarche.Date), T_Demarche.ID_Prospect
    FROM T_Prospects INNER JOIN T_Demarche ON T_Prospects.[] = T_Demarche.[ID_Prospect]
    GROUP BY T_Demarche.ID_Prospect;
    La ça fonctionne...

    Comment faire pour arranger ma requête de sorte avoir tous les champs?

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    Si dans le group by il y a des champs de la 2e table forcément ça peut pas grouper

    Dans les cas favorables (aucun doublon de date pour un même client) on peut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from clients c left join factures f on c.numcli=f.numcli where f.date_fac=(select max(date_fac) from factures x where x.numcli=c.numcli)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Merci, ça fonctionne

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

Discussions similaires

  1. [AC-2007] Ajout dans une table après controle avec donnée enregistrée dans cette table
    Par LAIGUILLEUR78 dans le forum VBA Access
    Réponses: 1
    Dernier message: 19/08/2016, 10h25
  2. Réponses: 6
    Dernier message: 15/06/2010, 03h18
  3. [MySQL] Créer une table actuelle à partir d'une table historique
    Par cleminute dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/10/2009, 14h35
  4. recupérer les info d'une table X pour alimenter une table Y
    Par lemerite dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/09/2008, 11h31
  5. Réponses: 1
    Dernier message: 12/04/2007, 17h08

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