Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cumul date à date

Sujet résolu
    10 février 2023 à 15:20:23

    Bonjour à tous,

    Je cherche une solution en SQL pour faire un cumul par jour ainsi qu'un cumul de tous les encaissement du mois cumulé jusqu'à aujourd'hui 

    Ma Table : 

    ID	date_encaissement	marche	valeur_enc
    1	02/02/2023	cineris	1000
    2	08/02/2023	cineris	500
    3	08/02/2023	cineris	17
    4	10/02/2023	cineris	8000
    5	10/02/2023	cineris	66



    Voici ma requête : 

    SELECT marche, date_encaissement, SUM(valeur_enc) as total
    
    FROM wp_jet_cct_suivi_activite AS jet_cct_suivi_activite  
    
    WHERE marche = 'cineris' AND MONTH (date_encaissement) = MONTH (current_date) AND YEAR (date_encaissement) = YEAR (current_date) AND DAY (date_encaissement) <= DAY (current_date)
    
    GROUP BY date_encaissement

    Résultat : J'ai bien le cumul encaissé dans la journée mais pas le cumul encaissé dans la journée ajouté aux précédents encaissement

    Array
    (
        [0] => stdClass Object
            (
                [marche] => Cineris
                [date_encaissement] => 2023-02-02
                [total] => 1000
            )
    
        [1] => stdClass Object
            (
                [marche] => Cineris
                [date_encaissement] => 2023-02-08
                [total] => 517
            )
    
        [2] => stdClass Object
            (
                [marche] => Cineris
                [date_encaissement] => 2023-02-10
                [total] => 8066
            )
    
    )
    

     Je souhaiterais obtenir comme résultats

    Array
    (
        [0] => stdClass Object
            (
                [marche] => Cineris
                [date_encaissement] => 2023-02-02
                [total] => 1000
            )
    
        [1] => stdClass Object
            (
                [marche] => Cineris
                [date_encaissement] => 2023-02-08
                [total] => 1517
            )
    
        [2] => stdClass Object
            (
                [marche] => Cineris
                [date_encaissement] => 2023-02-10
                [total] => 9583
            )
    
    )

    Auriez vous une idée car je sèche

    Merci à vous



    • Partager sur Facebook
    • Partager sur Twitter
      10 février 2023 à 20:55:15

      Bonjour,

      J'ai un début de piste mais c'est pas fou :

      DROP TABLE IF EXISTS encaissement;
      
      CREATE TABLE IF NOT EXISTS encaissement (
      	ID int PRIMARY KEY AUTO_INCREMENT NOT NULL,
      	date_encaissement date,
      	marche varchar(255),
      	valeur_enc int UNSIGNED
      );
      
      INSERT INTO encaissement (date_encaissement, marche, valeur_enc) VALUES
      ('2023/02/02', 'cineris', 1000),
      ('2023/02/08', 'cineris', 500),
      ('2023/02/08', 'cineris', 17),
      ('2023/02/10', 'cineris', 8000),
      ('2023/02/10', 'cineris', 66);
      
      SELECT
      	e.date_encaissement,
      	e.marche,
      	(SELECT SUM(valeur_enc) FROM encaissement WHERE date_encaissement = e.date_encaissement) AS total,
      	SUM(e2.valeur_enc) AS total_cumule
      FROM encaissement AS e
      INNER JOIN encaissement AS e2
      ON e.ID >= e2.ID
      WHERE e.marche = 'cineris' AND MONTH(e.date_encaissement) = MONTH(current_date) AND YEAR(e.date_encaissement) = YEAR(current_date) AND DAY(e.date_encaissement) <= DAY(current_date)
      GROUP BY e.ID, e.valeur_enc
      ORDER BY e.ID;

      Ce qui donne :

      date_encaissement|marche |total|total_cumule|
      -----------------+-------+-----+------------+
             2023-02-02|cineris| 1000|        1000|
             2023-02-08|cineris|  517|        1500|
             2023-02-08|cineris|  517|        1517|
             2023-02-10|cineris| 8066|        9517|
             2023-02-10|cineris| 8066|        9583|




      • Partager sur Facebook
      • Partager sur Twitter
        13 février 2023 à 9:40:24

        Salut Gadea,

        Nous y sommes presque.

        En effet cela ne correspond pas aux résultats souhaités et j'ai exploré en m'inspirant de ta réponse et j'y suis presque mais juste le premier total que je n'arrive pas à avoir...


        Ma requête : 

        SELECT e.marche, e.date_encaissement, SUM(e.valeur_enc) as total_j, (select SUM(e2.valeur_enc) from encaissement AS e2 where e.marche = 'cineris' and MONTH (e2.date_encaissement) = MONTH (current_date) AND YEAR (e2.date_encaissement) = YEAR (current_date) AND e2.date_encaissement < e.date_encaissement) as total_avantj, (SUM(e.valeur_enc)+(select SUM(e2.valeur_enc) from encaissement AS e2 where e.marche = 'cineris' and MONTH (e2.date_encaissement) = MONTH (current_date) AND YEAR (e2.date_encaissement) = YEAR (current_date) AND e2.date_encaissement < e.date_encaissement)) as total_cumul
        FROM encaissement AS e
        INNER JOIN encaissement AS e2 ON e._ID = e2._ID
        WHERE e.marche = 'cineris' AND MONTH (e.date_encaissement) = MONTH (current_date) AND YEAR (e.date_encaissement) = YEAR (current_date) AND DAY (e.date_encaissement) <= DAY (current_date)
        GROUP BY e.date_encaissement
        

        Résultats : 

        Array
        (
            [0] => stdClass Object
                (
                    [marche] => Cineris
                    [date_encaissement] => 2023-02-02
                    [total_j] => 1000
                    [total_avantj] => 
                    [total_cumul] => 
                )
        
            [1] => stdClass Object
                (
                    [marche] => Cineris
                    [date_encaissement] => 2023-02-04
                    [total_j] => 500
                    [total_avantj] => 1000
                    [total_cumul] => 1500
                )
        
            [2] => stdClass Object
                (
                    [marche] => Cineris
                    [date_encaissement] => 2023-02-08
                    [total_j] => 521
                    [total_avantj] => 1500
                    [total_cumul] => 2021
                )
        
            [3] => stdClass Object
                (
                    [marche] => Cineris
                    [date_encaissement] => 2023-02-10
                    [total_j] => 8066
                    [total_avantj] => 2021
                    [total_cumul] => 10087
                )
        
        )
        



        Si vous avez une autre idée ;) 

        -
        Edité par Greg_G 13 février 2023 à 10:19:18

        • Partager sur Facebook
        • Partager sur Twitter
          13 février 2023 à 11:29:08

          @Greg_G Bonjour, je viens de retirer des spam votre dernier message, si cela arrive encore vous pouvez poster dans ce sujet Si votre message est considéré comme spam

          • Partager sur Facebook
          • Partager sur Twitter
            13 février 2023 à 23:03:51

            Que veux-tu faire exactement ? As-tu des limites ? Par exemple, ne plus prendre en compte les encaissements d'il y a X années.

            J'avais comme idée une table triée par date et par marché. Pour la partie calcul informatique (programmation en sorte) le mieux serait d'utiliser un langage de programmation. Ça doit être possible uniquement en SQL mais je trouve cela compliqué depuis 3 jours.

            Voici le brouillon que j'ai fait (il est lisible) :

            date encaissement, donc facture payée.
            POUR chaque marché :
              montant = 0
              TANT QUE i <= jour du mois
                montant += encaissements du jour i
                ajouter ligne (jour i, montant)
                SI montant >0 :
                  afficher ligne
                i++
            
            resultat voulu
            marche | date | montant total
            A | 1 janvier | 1000
            A | 2 janvier | 2000 (1000 + 1000)
            ...
            C | 31 janvier | 450000
            
            CREATE TABLE FACTURES (
              id
              date
              marché
              montant)
            
            marché (A, B, C)
            
            CREATE TABLE CUMULS (
              marché
              date
              montant cumul)
            
            ---
            
            Table marchés :
            id marché
            nom marché UNIQUE
            
            SELECT COUNT(*) AS nombre_de_marche
            FROM marchés;
            
            (s'il y a 3 marchés)
            nombre_de_marche ||
            3 || de 1 à 3
            
            DROP TABLE IF EXISTS MARCHES;
            
            CREATE TABLE IF NOT EXISTS MARCHES (
              id_marche tinyint unsigned PRIMARY KEY AUTO_INCREMENT,
              nom_marche varchar(128) UNIQUE);
            
            INSERT INTO MARCHES (nom_marche) VALUES
              ('cineris'),
              ('teleris'),
              ('photoris');
            
            SELECT COUNT(*) as nombre_de_marche
            FROM MARCHES;
            
            DROP TABLE IF EXISTS ENCAISSEMENTS;
            
            CREATE TABLE IF NOT EXISTS ENCAISSEMENTS (
              id_encaissement int unsigned PRIMARY KEY AUTO_INCREMENT,
              date_encaissement date KEY,
              valeur_encaissement int unsigned,
              marche_encaissement tinyint unsigned,
              FOREIGN KEY (marche_encaissement) REFERENCES TO MARCHE (id_marche));
            
            # faire un 3-tuple (date, valeur, marché)
            exemple, je veux insérer au 15 janvier 2023, la valeur de 1500 €, pour le marché cinéris :
              ('2023-15-01', 1500, 'cinéris') # DATE = 'AAAA-MM-JJ'
            
            INSERT INTO ENCAISSEMENTS (date_encaissement, valeur_encaissement, marche_encaissement) VALUES
              ('2023-10-01', 1500, 1),
              ('2023-10-01', 145, 1),
              ('2023-10-01', 5400, 2),
              ('2023-12-01', 4100, 1),
              ('2023-12-01', 4141, 2),
              ('2023-12-01', 14502, 2);
            
            Je dois avoir comme résultat final :
            marché (tri 2) | date (tri 1) | total
            1 | 2023-10-01 | 1645 (1500+145)
            2 | 2023-10-01 | 5400
            1 | 2023-12-01 | 5745 (1645 + 4100)
            2 | 2023-12-01 | 24043 (5400 + 4141 + 14502)



            • Partager sur Facebook
            • Partager sur Twitter

            Cumul date à date

            × 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