Клиенты старше 6 месяцев, но не новее - PullRequest
0 голосов
/ 14 января 2019

Я запрашиваю клиентов за последние 6 месяцев следующим образом:

SELECT customer
FROM table
WHERE date_of_last_order>date_sub(NOW(),INTERVAL 6 MONTH)
GROUP BY customer
ORDER BY customer ASC

Теперь я также хочу список заказов старше 6 месяцев, НО он НЕ должен включать клиентов за последние 6 месяцев.

Есть идеи? Спасибо!

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Хмм ... как ты думаешь, Гордон? Разве предложение HAVING не применимо только к "downstream", к выбранным до сих пор строкам?

Другая возможность, которая приходит на ум, это NOT IN ...

...
WHERE date_of_last_order>date_sub(NOW(),INTERVAL 6 MONTH)
  AND customer NOT IN (
    SELECT DISTINCT customer FROM table 
    WHERE date_of_last_order < date_sub(NOW(),INTERVAL 6 MONTH)
  )
...

... хотя для меня "это уж точно начинает звучать дорого" Я определенно хотел бы применить глагол EXPLAIN к различным альтернативам, которые я придумал, чтобы найти тот, который MySQL считает «самым дешевым».

0 голосов
/ 14 января 2019

Поскольку структура таблицы не описана, очевидно, что вы хотите date_of_last_order <= 6 месяцев. </p>

SELECT customer
FROM table
WHERE date_of_last_order <= date_sub(NOW(), INTERVAL 6 MONTH)
GROUP BY customer
ORDER BY customer ASC
0 голосов
/ 14 января 2019

Вы хотите использовать предложение having:

SELECT customer
FROM table
GROUP BY customer
HAVING MAX(date_of_last_order) <= date_sub(NOW(), INTERVAL 6 MONTH)
ORDER BY customer ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...