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 :

Extraire le total des versements + date du dernier versement + le dernier montant versé


Sujet :

Langage SQL

  1. #1
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut Extraire le total des versements + date du dernier versement + le dernier montant versé
    Bonjour a tous,
    pour une table qui contient des versements des clients dont la structure est la suivante :

    CodeClient
    DateVersement
    MontantVerser

    Pour extraire le total des versement + date du dernier versement , j'ai appliquer cette requête qui marche très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select CodeClient, SUM(MontantVerser) as TotalVers , max(DateVersement) as DernierDateVer
    FROM TableVersement
    Group by CodeClient

    mais j'ai pas pu avoir le dernier montant verser qui correspond a la dernière date du versement.

    y a t il une idée SVP ....

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 674
    Points : 26 309
    Points
    26 309
    Billets dans le blog
    2
    Par défaut
    Comme ceci

    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
    with cte1 (c1, c2, c3) as ( 
          select CodeClient
               , SUM(MontantVerser) 
               , max(DateVersement)
          group by CodeClient)
     
    Select c1, c2, c3, t2.montantverser
    FROM CTE1
    inner join TableVersement T2
       on t2.CodeClient = c1
    where not exists
         (select 1
          from TableVersement t3
          where t3.CodeClient    = t2.CodeClient 
            and t3.DateVersement > t2.DateVersement)
    Au passage, le nom de la colonne "montantverser" ca pique les yeux !

  3. #3
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    2 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 644
    Points : 10 376
    Points
    10 376
    Billets dans le blog
    21
    Par défaut
    Une variante d'escartefigue :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    with cte1 (c1, c2, c3) as ( 
          select CodeClient
               , SUM(MontantVerser) 
               , max(DateVersement)
          group by CodeClient)
     
    Select c1, c2, c3, t2.montantverser
    FROM CTE1
    inner join TableVersement T2
       on t2.DateVersement = c3
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut
    Merci a vous , escartefigue et dorinf ,
    mais , interbase 7.5 ne supporte pas les CTE

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 674
    Points : 26 309
    Points
    26 309
    Billets dans le blog
    2
    Par défaut
    En ce cas il vous suffit d'encapsuler la CTE sous forme de requete imbriquée

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    En instance de retraite
    Inscrit en
    mai 2002
    Messages
    8 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : En instance de retraite
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 861
    Points : 29 496
    Points
    29 496
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    requête imbriquée
    Aussi nommé table dérivée dans la littérature...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    En ce cas il vous suffit d'encapsuler la CTE sous forme de requete imbriquée
    un exemple svp

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    En instance de retraite
    Inscrit en
    mai 2002
    Messages
    8 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : En instance de retraite
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 861
    Points : 29 496
    Points
    29 496
    Par défaut
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select  cte1.CodeClient
        ,   cte1.c2
        ,   cte1.c3
        ,   t2.montantverser
    FROM (  select  CodeClient
               ,    SUM(MontantVerser)  as c2
               ,    max(DateVersement)  as c3
            group by CodeClient
           )    as cte1
    inner join TableVersement T2
       on t2.DateVersement = cte1.c3
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select  cte1.CodeClient
        ,   cte1.c2
        ,   cte1.c3
        ,   t2.montantverser
    FROM (  select  CodeClient
               ,    SUM(MontantVerser)  as c2
               ,    max(DateVersement)  as c3
            group by CodeClient
           )    as cte1
    inner join TableVersement T2
       on t2.DateVersement = cte1.c3

    Merci pour l'aide .
    mais j'obtiens une erreur au niveau de la cinquième ligne (Where (SELECT ....)
    token unknown

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 674
    Points : 26 309
    Points
    26 309
    Billets dans le blog
    2
    Par défaut
    where (select ? ce devrait être from (select

  11. #11
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    where (select ? ce devrait être from (select

    Oui c'est exactement ce que j'ai fait (c'est une faut de frappe dans me message précédent)

    FROM ( select CodeClient....


    mais j'obtiens une erreur au niveau de la cinquième ligne (FROM (SELECT ....)
    token unknown .

  12. #12
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    2 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 644
    Points : 10 376
    Points
    10 376
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    token unknown .
    A vu de nez, la requête est bonne. Quel SGBD utilises-tu ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 674
    Points : 26 309
    Points
    26 309
    Billets dans le blog
    2
    Par défaut
    La réponse est
    Citation Envoyé par aimer_Delphi Voir le message
    Merci a vous , escartefigue et dorinf ,
    mais , interbase 7.5 ne supporte pas les CTE
    Je ne connais pas interbase, peut être y a -t- il une syntaxe particulière

  14. #14
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    2 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 644
    Points : 10 376
    Points
    10 376
    Billets dans le blog
    21
    Par défaut
    Honte à moi... c'était pourtant indiqué !
    Je ne connais pas interbase. Donc si un connaisseur passe par là...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  15. #15
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    En instance de retraite
    Inscrit en
    mai 2002
    Messages
    8 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : En instance de retraite
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 861
    Points : 29 496
    Points
    29 496
    Par défaut
    Ça fait plus de vingt ans que je n'ai pas utilisé InterBase...
    Mais essaye en enlevant le as de la ligne 9
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  16. #16
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Ça fait plus de vingt ans que je n'ai pas utilisé InterBase...
    Mais essaye en enlevant le as de la ligne 9
    même problème

  17. #17
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    En instance de retraite
    Inscrit en
    mai 2002
    Messages
    8 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : En instance de retraite
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 861
    Points : 29 496
    Points
    29 496
    Par défaut
    C'est la fôte à escartefigue
    Il a oublié le FROM dans la CTE de la première requête et personne ne l'a vu

    Si on ajoute FROM TableVersement entre les lignes 7 et 8, ça devrait tout de suite mieux fonctionner
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  18. #18
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut
    Bonjour a tous,
    je pense que le problème est dans la version d'interbase (7.5 server) dont j'utilise.
    car d'apres la discussion ci-après : InterBase doesn't support derived tables .
    (voir cette discussion http://stackoverflow.com/questions/6...sing-interbase)

  19. #19
    Membre actif

    Inscrit en
    mai 2010
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 357
    Points : 279
    Points
    279
    Par défaut
    est il possible d’utilisé une vue (view) ?

  20. #20
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    En instance de retraite
    Inscrit en
    mai 2002
    Messages
    8 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : En instance de retraite
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 861
    Points : 29 496
    Points
    29 496
    Par défaut
    C'est la solution que j'allais te proposer...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Extraire le nombre des jours fériès entre deux dates
    Par b.kawsam dans le forum Salesforce.com
    Réponses: 1
    Dernier message: 28/04/2014, 01h54
  2. Réponses: 3
    Dernier message: 20/02/2014, 15h34
  3. extraire et aggréger des dates d'événements sportifs dans un flux RSS
    Par aerapod dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 13/07/2012, 00h52
  4. Calculer le total des versements
    Par moh_oracle dans le forum Débuter
    Réponses: 25
    Dernier message: 07/02/2011, 14h40
  5. comparer des champs date time
    Par HULK dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/01/2005, 14h02

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