Alexander_89

BB_3

Jun 21st, 2023
797
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.23 KB | None | 0 0
  1. /*create table purchase (bonuscard int, date_purchase date)
  2. insert into purchase values  
  3. (2133, '2020-01-12'),
  4. (4791, '2020-03-02'),
  5. (1589, '2020-07-10'),
  6. (4455, '2020-12-22'),
  7. (6037, '2020-01-31'),
  8. (2133, '2020-03-18'),
  9. (1589, '2020-03-12'),
  10. (4791, '2020-05-02'),
  11. (4455, '2021-01-13'),
  12. (2133, '2020-01-03'),
  13. (6037, '2020-02-19'),
  14. (2133, '2020-01-10'),
  15. (1589, '2020-04-15'),
  16. (6037, '2020-08-07')*/
  17. -- определяем дату следующей покупки
  18. WITH t1 AS (
  19.     SELECT bonuscard, date_purchase, LEAD(date_purchase, 1, NULL) OVER (PARTITION BY bonuscard ORDER BY date_purchase) date_next
  20.     FROM purchase
  21.     ORDER BY bonuscard
  22. ),
  23. -- находим разницу в месяцах между текущей покупкой и предыдущей
  24. t2 AS (
  25.     SELECT bonuscard, date_purchase, date_next, date_part('month', date_next) - date_part('month', date_purchase) diff
  26.     FROM t1
  27. )
  28. -- оставляем diff = 1 (diff = 0 - текущая и предыдущая покупка в одном месяце,
  29. -- diff > 1 - между покупками прошло больше месяца, то есть не выполняется условие "2 месяца подряд")
  30. SELECT bonuscard
  31. FROM t2
  32. WHERE diff = 1
Advertisement
Add Comment
Please, Sign In to add comment