У меня есть две таблицы:
Member
'id'
'name'
Membership
'id'
'site_id'
'member_id'
'year'
Я хотел бы настроить отчет для отслеживания подписок в течение многих лет, например:
- Идентификатор сайта
- всего подписка на 2019 год
- всего подписка на 2018 год
- NEW (первая подписка на этот сайт)
- Обновление (подписки в 2019 и 2018 годах на одном сайте)
- Потерян (подпрограммы, сделанные в 2018 году, но не в 2019 году для этого сайта)
Я борюсь за два левых соединения на одной и той же таблице Membership
, например:
SELECT m.site_id,
count(m2019.id) as total2019,
count(m2018.id) as total2018,
SUM(IF(m2019.member_id IS NOT NULL AND m2018.member_id IS NULL, 1, 0)) new,
SUM(IF(m2019.member_id IS NOT NULL AND m2018.member_id IS NOT NULL AND m2018.site_id = m2019.site_id, 1, 0)) renewal,
SUM(IF(m2018.member_id IS NOT NULL AND m2019.member_id IS NULL, 1, 0)) lost
FROM membership m
LEFT JOIN membership m2019 ON m.id = m2019.member_id AND m.year = '2019' AND m2019.year = '2019' AND m.site_id = m2019.site_id
LEFT JOIN membership m2018 ON m.id= m2018.member_id AND m.year = '2018' AND m2018.year = '2018' AND m.site_id = m2018.site_id
GROUP BY m.site_id;
Счет правильный, но условия не так, я уверен, что мой запрос неверен. Я нахожусь на этом долгое время, и я начинаю чувствовать себя немного потерянным.
Может ли кто-нибудь помочь мне выяснить, где я делаю неправильно? Спасибо