Получить записи текущей недели, ЗА ИСКЛЮЧЕНИЕМ будущих дат текущей недели - PullRequest
0 голосов
/ 07 августа 2020

Это мой SQL для получения заказов текущей недели:

SELECT * FROM orders 
WHERE YEARWEEK(order_date, 1) = YEARWEEK(CURDATE(), 1) 
ORDER BY order_date DESC;

Но проблема в том, что он также выбирает записи будущих дат на текущей неделе. Как это остановить?

Ответы [ 2 ]

3 голосов
/ 07 августа 2020

Просто добавьте условие для текущей даты:

SELECT o.*
FROM orders o
WHERE YEARWEEK(order_date, 1) = YEARWEEK(CURDATE(), 1) AND
      order_date <= CURDATE()
ORDER BY order_date DESC;
0 голосов
/ 07 августа 2020

Имейте в виду: если вы используете столбец order_date в функции для построения предложения where, это приведет к запросу, который не использует индекс для order_date, и поэтому его следует избегать, если ваша таблица может быть большой.

Если вы вычисляете первую дату текущей недели, вы можете создать предложение where, просто используя order_date, и он будет использовать индекс.

Может быть, этот может вдохновить вас:

WHERE order_date BETWEEN DATEADD(DAY, -WEEKDAY(CURDATE())), CURDATE()) AND CURDATE()

Я не тестировал это, но адаптировал имена функций к MySQL, используя документацию. Идея состоит в том, чтобы вычислить первую дату текущей недели, чтобы вы знали диапазон для фильтрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...