У меня есть набор данных, где мне нужно узнать о доходах новых подписчиков.
Это подписчики, которые платят либо еженедельно, либо ежемесячно в зависимости от подписки, в которой они находятся.
Уникальный идентификатор - "клиент", а данные находятся на отметке времени, но я хочу, чтобы он свернул на месячном уровне.
Теперь за каждый месяц нам нужно узнать доход только для новостных подписчиков. В принципе, представьте, что клиенты участвуют в ежемесячных/еженедельных подписках, и мы хотим, чтобы их ПЕРВЫЕ платежи были засчитаны здесь.
Здесь образец данных и
created customer amount
16-Feb-18 14:03:55 cus_BwcisIF1YR1UlD 33300
16-Feb-18 14:28:13 cus_BpLsCvjuubYZAe 156250
15-Feb-18 19:19:14 cus_C3vT6uVBqJC1wz 50000
14-Feb-18 23:00:24 cus_BME5vNeXAeZSN2 162375
9-Feb-18 14:27:26 cus_BpLsCvjuubYZAe 156250
....и так далее...
вот окончательный желаемый результат
yearmonth new_amount
Jan - 2018 100000
Feb - 2018 2000
Dec - 2017 100002
Это необходимо сделать в интерфейсе MySQL.
We can have sql subquery for only the 1st payment of the new customer with
amount for every month and year
The query is as follows
SELECT month(created) as mm,year(created) as yyyy,
sum(amount) as new_amount
FROM t
WHERE t.created=(select min(t2.created) from t t2 where
t2.customer=t.customer)
В основном, вы хотите отфильтровать данные для первого клиента. Один из способов сделать это включает коррелированный подзапрос.
Остальное просто агрегируется по годам и месяцам. Таким образом, общий запрос не так уж сложный, но он состоит из двух отдельных частей:
select year(created) as yyyy, month(created) as mm,
count(*) as num_news,
sum(amount) as amount_news
from t
where t.created = (select min(t2.created)
from t t2
where t2.customer = t.customer
)
group by yyyy, mm