please help me. imagine the table as bellow
x
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