Partage
  • Partager sur Facebook
  • Partager sur Twitter

Select client avec retard de paiement pour le mois

Sujet résolu
    15 mai 2019 à 10:18:21

    Bonjour tout le monde, 

    Je dois sélectionner les prestations de nos clients qui n'ont un retard de paiement que pour le mois actuel. Donc si un client a des prestations (même une seule) impayées pour un mois antérieur, ses prestations ne doivent pas figurer dans la liste. 

    Je suis parti du principe que je devais d'abord sélectionner toutes les prestations impayées. (Quand 'tekort' > 0 la prestation est impayée)

    SELECT
    	id_tsp_tekort,
    	id_client,
        	datum,
        	client,
        	id_agence,
        	tekort
    FROM trx_tsp_tekort
    WHERE
    	tekort > 0

    Et ensuite faire un tri à partir de ce résultat 

    SELECT 
        K.id_tsp_tekort,
        K.id_client,
        K.client,
        K.id_agence,
        K.datum,
    	K.tekort
    FROM (
    	SELECT
    		id_tsp_tekort,
    		id_client,
        	        datum,
        	        client,
        	        id_agence,
        	        tekort
    	FROM trx_tsp_tekort
    	WHERE
    		tekort > 0
    ) K
    WHERE
    	K.tekort > 0 
    	AND (K.datum >= '2019-05-01' AND K.datum <= '2019-05-31')


    Sauf que je bug totalement, je n'arrive pas à exprimer mes conditions dans le second WHERE

    Est-ce qu'une bonne âme pourrait me donner un petit coup de pouce s'il vous plait ? 

    Bien évidemment si je n'ai pas été assez clair, n'hésitez surtout pas.

    D'avance merci et bonne journée à tous. 

    -
    Edité par SebC1983 15 mai 2019 à 10:19:26

    • Partager sur Facebook
    • Partager sur Twitter
      15 mai 2019 à 10:26:38

      Bonjour,

      Si MySQL, tu peux travailler ainsi, à adapter pour autre SGBD :

      SELECT
          id_tsp_tekort,
          id_client,
          datum,
          client,
          id_agence,
          tekort
      FROM trx_tsp_tekort
      WHERE
          tekort > 0
          AND YEAR( datum ) = 2019
          AND MONTH( datum ) = 5
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        15 mai 2019 à 10:47:22

        Bonjour Benzouye, 

        Avant tout, un tout grand merci pour ton aide.

        Je suis bien en MySQL (sorry pour l'oubli) 

        Par contre, en faisant ainsi j'obtiens la liste de tous les clients qui ont un retard de paiement pour le mois actuel mais aussi ceux qui ont un retard pour les mois antérieurs. 

        Comme je ne suis pas sûr que ce que je dis soit très clair, je détaille avec un exemple.

        Imaginons les prestations suivantes : 

        22/04/2019 Client Dupont Payé
        
        24/04/2019 Client Dupont Payé
        
        28/04/2019 Client Dupont Payé
        
        02/05/2019 Client Dupont impayé
        
        03/05/2019 Client Dupont impayé
        22/04/2019 Client Dubois impayé
        
        24/04/2019 Client Dubois impayé
        
        28/04/2019 Client Dubois impayé
        
        02/05/2019 Client Dubois impayé
        
        03/05/2019 Client Dubois impayé




        Dupont doit figurer dans ma liste mais pas Dubois.

        Encore un grand merci pour ton aide.

        -
        Edité par SebC1983 15 mai 2019 à 10:48:12

        • Partager sur Facebook
        • Partager sur Twitter
          15 mai 2019 à 11:08:40

          SebC1983 a écrit:

          nos clients qui n'ont un retard de paiement que pour le mois actuel

          Je n'avais pas vu le QUE ...

          Du coup je te propose de passer par une sous-requête pour lister les clients qui ont des impayés sur d'autres mois, et de faire une jointure externe avec une condition IS NULL :

          SELECT
              T1.id_tsp_tekort,
              T1.id_client,
              T1.datum,
              T1.client,
              T1.id_agence,
              T1.tekort
          FROM
              trx_tsp_tekort T1
                  LEFT JOIN (
                          -- Clients avec impayés sur autres mois
                          SELECT DISTINCT id_client
                          FROM trx_tsp_tekort
                          WHERE
                              tekort > 0
                              AND DATE_FORMAT( datum, '%Y%m' ) <> '201905'
                      ) T2
                      ON T1.id_client = T2.id_client
          WHERE
              T1.tekort > 0
              AND YEAR( T1.datum ) = 2019
              AND MONTH( T1.datum ) = 5
              AND T2.id_client IS NULL

          -
          Edité par Benzouye 15 mai 2019 à 11:09:45

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            15 mai 2019 à 11:18:35

            Benzouye tu es génial ! 

            A chaque fois que j'ai rencontré un souci c'est toi qui est venu à la rescousse ! 

            Ca fonctionne parfaitement, un grand merci ! 

            • Partager sur Facebook
            • Partager sur Twitter
              15 mai 2019 à 11:20:18

              Tu aurais aussi pu fonctionner avec un NOT IN, que je trouve plus lisible mais moins performant :

              SELECT
                  id_tsp_tekort,
                  id_client,
                  datum,
                  client,
                  id_agence,
                  tekort
              FROM trx_tsp_tekort
              WHERE
                  tekort > 0
                  AND YEAR( datum ) = 2019
                  AND MONTH( datum ) = 5
                  AND id_client NOT IN (
                      -- Clients avec impayés sur autres mois
                      SELECT DISTINCT id_client
                      FROM trx_tsp_tekort
                      WHERE
                          tekort > 0
                          AND DATE_FORMAT( datum, '%Y%m' ) <> '201905'
                  )
              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                15 mai 2019 à 11:26:40

                Effectivement la seconde est plus lisible (enfin ... en tout cas je l'appréhende plus facilement {#emotions_dlg.rire})

                Quoi qu'il en soit c'est de l'or en barre pour moi, ca m'aide vraiment beaucoup, encore merci ! 

                • Partager sur Facebook
                • Partager sur Twitter

                Select client avec retard de paiement pour le mois

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown