step1: 统计9月期间是会员的所有用户的均摊收入;
step2: 9月期间是会员的所有用户中,若大会员生效开始日期小于9月1号将start_date设置为9月1号,否则,start_date等于begin_date。若大会员生效结束日期大于9月30号将stop_date设置为9月30号,否则,stop_date等于end_date。(目的在于统计的是9月份b站会员的收入);
step3:stop_date减start_date即为每个大会员9月份会员生效的天数,乘以均摊收入即为每个用户9月份收入,对所有用户收入求和,即为9月b站会员费的收入。
SELECT round(sum((DATEDIFF(stop_date, start_date)+1)*avg_revenue), 2) as revenue
FROM(
SELECT *,
IF(begin_date<='2021-9,1', date('2021-9,1'), begin_date) as start_date,
IF(end_date>='2021-9-30',date('2021-9-30'), end_date) as stop_date,
pay_amount / days as avg_revenue
FROM detail_list_tb
WHERE (begin_date<'2021-9-1' and end_date>'2021-9-1')
OR begin_date BETWEEN '2021-9-1' AND '2021-9-30'
)t;