как разделить данные за месяц со специальным условием - PullRequest
0 голосов
/ 19 февраля 2020

у меня есть 1 таблица с именем order_star_member , в этой таблице содержится users_id в качестве пользователей, createAt в качестве даты транзакции и total_price_star_member в качестве суммы транзакции каждого users_id. Первым, кого я хочу узнать, являются идентификаторы пользователей, которые становятся звездными, звездный участник - это users_id, которые совершают транзакции> = 600.000 в месяц. во-вторых, я хочу сгруппировать звездного участника в феврале 2020 года и группировать его в зависимости от того, откуда звездный член пришел из месяца, вот мой синтаксис

select count(distinct osm1.users_id) as jml_buyer, year(osm1.createdAt), month(osm1.createdAt) from order_star_member osm1
where osm1.createdAt >= MAKEDATE(year(osm1.createdAt), 1) + INTERVAL month(osm1.createdAt) month - interval 1 month
AND
osm1.createdAt <= MAKEDATE(YEAR(osm1.createdAt), 1) + INTERVAL month(osm1.createdAt) month- INTERVAL 1 day
AND not EXISTS (select distinct(osm2.users_id) from order_star_member osm2 where osm1.users_id = osm2.users_id
and osm2.createdAt < MAKEDATE(YEAR(osm1.createdAt), 1) + INTERVAL month(osm1.createdAt) month- INTERVAL 1 month)
and exists (select distinct(osm3.users_id) from order_star_member osm3 where osm1.users_id = osm3.users_id
and osm3.createdAt >= '2020-02-01'
and osm3.createdAt < '2020-03-01') group by month(osm1.createdAt) having sum(osm1.total_price_star_member) >= 600000;

и вот моя скрипка

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ee605f652628518cbf5a1bf121a46360

это фиктивные данные

+----------+----------+------+-------------------------+
| users_id |  month   | year | total_price_star_member |
+----------+----------+------+-------------------------+
|        1 | January  | 2019 |                  60.000 |
|        1 | February | 2019 |                 200.000 |
|        2 | January  | 2019 |                 300.000 |
|        2 | January  | 2019 |                 400.000 |
|        1 | January  | 2019 |                 350.000 |
|        3 | January  | 2019 |                 300.000 |
|        3 | February | 2019 |                 600.000 |
|        4 | February | 2019 |                 650.000 |
+----------+----------+------+-------------------------+

, поэтому ожидаемые результаты, если я хочу узнать статистику c количества звездных членов за февраль месяца, будут такими:

+------+-------+-----------------+
| year | month | count(users_id) |
+------+-------+-----------------+
| 2019 |     1 |               0 |
| 2019 |     2 |               2 |
+------+-------+-----------------+

объяснение: так, исходя из этого манекена, статистика c месяца февраль примерно такая: 0 users_id из января, потому что нет user_id, у которого была транзакция> = 600.000 в январе, который также делал транзакцию> = 600 000 в феврале и 2 users_id от февраля, которые совершают транзакцию> = 600 000 в феврале (users_id 3 и 4)

...