Я хочу получить идентификатор клиента, который покупает мой продукт каждый месяц с трех месяцев до go. Сегодня 15 февраля 2020. Итак, я хочу получить клиента, который совершит покупку в ноябре 2019 года, декабре 2019 года, январе 2020 года.
У меня есть только 1 заказ стола (MySQL), например:
Таблица заказов (первичный ключ = ID (Автоинкремент)):
-----------------------------------------------
| ID | id_cust | buy_date |
-----------------------------------------------
| 1 | 10 | 2019-11-01 |
| 2 | 11 | 2019-11-10 |
| 3 | 10 | 2019-12-11 |
| 4 | 12 | 2019-12-12 |
| 5 | 10 | 2020-01-13 |
| 6 | 11 | 2020-01-14 |
| 7 | 12 | 2020-01-15 |
-----------------------------------------------
В зависимости от того, что я хочу, ответ будет id_cust 10
Я пробовал и получил такие результаты:
SELECT g1.`id_cust`
FROM `orders` g1
JOIN `orders` g2
ON g2.`id_cust` = g1.`id_cust`
AND g2.`buy_date` >= STR_TO_DATE(CONCAT('01-', LPAD(MONTH(DATE_SUB(NOW(), INTERVAL 2 MONTH)), 2, '0'), '-', YEAR(DATE_SUB(NOW(), INTERVAL 2 MONTH))), '%d-%m-%Y')
AND g2.`buy_date` < STR_TO_DATE(CONCAT('01-', LPAD(MONTH(DATE_SUB(NOW(), INTERVAL 1 MONTH)), 2, '0'), '-', YEAR(DATE_SUB(NOW(), INTERVAL 1 MONTH))), '%d-%m-%Y')
JOIN `orders` g3
ON g3.`id_cust` = g1.`id_cust`
AND g3.`id_cust` = g2.`id_cust`
AND g3.`buy_date` >= STR_TO_DATE(CONCAT('01-', LPAD(MONTH(DATE_SUB(NOW(), INTERVAL 1 MONTH)), 2, '0'), '-', YEAR(DATE_SUB(NOW(), INTERVAL 1 MONTH))), '%d-%m-%Y')
AND g3.`buy_date` < STR_TO_DATE(CONCAT('01-', LPAD(MONTH(NOW()), 2, '0'), '-', YEAR(NOW())), '%d-%m-%Y')
WHERE g1.`buy_date` >= STR_TO_DATE(CONCAT('01-', LPAD(MONTH(DATE_SUB(NOW(), INTERVAL 3 MONTH)), 2, '0'), '-', YEAR(DATE_SUB(NOW(), INTERVAL 3 MONTH))), '%d-%m-%Y')
AND g1.`buy_date` < STR_TO_DATE(CONCAT('01-', LPAD(MONTH(DATE_SUB(NOW(), INTERVAL 2 MONTH)), 2, '0'), '-', YEAR(DATE_SUB(NOW(), INTERVAL 2 MONTH))), '%d-%m-%Y')
GROUP BY g1.`id_cust`
Пожалуйста, помогите мне упростить синтаксис, потому что он работает очень медленно, когда выполняется с большим количеством данных, или, если я ошибаюсь в своем синтаксисе, исправьте мой синтаксис.