MySQL cumulative sum grouped by date

前端 未结 2 881
我寻月下人不归
我寻月下人不归 2020-12-01 10:56

I know there have been a few posts related to this, but my case is a little bit different and I wanted to get some help on this.

I need to pull some data out of the

相关标签:
2条回答
  • 2020-12-01 11:37

    New Answer

    At first, I didn't understand you were trying to do a running total. Here is how that would look:

    SET @runningTotal = 0;
    SELECT 
        e_date,
        num_interactions,
        @runningTotal := @runningTotal + totals.num_interactions AS runningTotal
    FROM
    (SELECT 
        DATE(eDate) AS e_date,
        COUNT(*) AS num_interactions
    FROM example AS e
    GROUP BY DATE(e.Date)) totals
    ORDER BY e_date;
    

    Original Answer

    You could be getting duplicates because of your join. Maybe e1 has more than one match for some rows which is inflating your count. Either that or the comparison in your join is also comparing the seconds, which is not what you expect.

    Anyhow, instead of chopping the datetime field into days and months, just strip the time from it. Here is how you do that.

    SELECT
       DATE(e.Date) AS e_date,
       count(e.ID) AS num_interactions
    FROM example AS e
    JOIN example e1 ON DATE(e1.Date) <= DATE(e.Date)
    GROUP BY DATE(e.Date);
    
    0 讨论(0)
  • 2020-12-01 11:56

    I figured out what I needed to do last night... but since I'm new to this I couldn't post it then... what I did that worked was this:

    SELECT
       DATE(e.Date) AS e_date,
       count(e.ID) AS num_daily_interactions,
       (
          SELECT 
             COUNT(id)
          FROM example 
          WHERE DATE(Date) <= e_date
       ) as total_interactions_per_day
    FROM example AS e
    GROUP BY e_date;
    

    Would that be less efficient than your query? I may just do the calculation in python after pulling out the count per day if its more efficient, because this will be on the scale of thousands to hundred of thousands of rows returned.

    0 讨论(0)
提交回复
热议问题