Mysql получить заказы с прошлого года в том же месяце, что и сегодня - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть таблица заказов, и я хотел бы сделать запрос на получение всех заказов с месяца прошлого года до того же месяца, что и сейчас.Пример: мы находимся в ноябре, я хотел бы восстановить все заказы ноября месяца 2017 года.

Я пытаюсь что-то подобное, но это не работает:

    SELECT COUNT(*)
   FROM ps_orders o
   WHERE YEAR(o.date_add) = YEAR(NOW() - INTERVAL 1 YEAR)
   AND MONTH(o.date_add) = MONTH(NOW() - INTERVAL 1 MONTH)

Спасибоза вашу помощь

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Я бы рекомендовал делать это с диапазонами дат:

SELECT COUNT(*)
FROM ps_orders o
WHERE o.date_add >= (curdate() - interval (day - 1) day) - interval 12 month AND
      o.date_add >= (curdate() - interval (day - 1) day) - interval 11 month ;

Когда вы используете такие функции, как YEAR() и MONTH(), оптимизатор не будет в полной мере использовать доступный индекс для date_add.Тем не менее, эта версия может использовать соответствующий индекс.

0 голосов
/ 29 ноября 2018

Вам не нужно вычитать месяц.Для получения результатов за тот же месяц предыдущего года должно быть MONTH(NOW()).

SELECT COUNT(*)
FROM ps_orders o
WHERE YEAR(o.date_add) = YEAR(NOW() - INTERVAL 1 YEAR)
  AND MONTH(o.date_add) = MONTH(NOW()) -- same as current month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...