please help me. imagine the table as bellow
id name date_join 1 joni 2020-01-01 2 dani 2020-01-01 3 fani 2020-01-02 4 rina 2020-01-02 5 budi 2020-01-02 6 john 2020-01-03 7 dita 2020-01-03 8 sani 2020-01-05 9 soni 2020-01-06 10 aple 2020-01-06 11 rita 2020-01-06 12 hari 2020-01-06
and I want to query and show result like this
dates total_member 2020-01-01 2 2020-01-02 5 2020-01-03 7 2020-01-04 7 2020-01-05 8 2020-01-06 12 2020-01-07 12
I dont know how to write query to show result like that. I used (date_join) as dates, count(id) and group by date(date_join) and the result not show like that.
Advertisement
Answer
In MySQL 8.0, you can solve this with aggregation and a window sum:
select date_join, sum(count(*))) over(order by date_join) total_members from mytable group by date_join order by date_join
Or even without aggregation:
select date_join, total_members from ( select date_join, count(*) over(order by date_join, name) total_members, row_number() over(order by date, name desc) rn from mytable ) t where rn = 1 order by date_join
In earlier versions, one option is to select the distinct dates and use a correlated subquery to get the running count:
select date_join, (select count(*) from mytable t1 where t1.date_join <= t.date_join) total_members from (select distinct date_join from mytable) t