MySQL выбирает из предыдущей недели, а не только за 7 дней

#mysql

#mysql

Вопрос:

Я пытаюсь получить запрос, который выбирает предыдущую неделю (Вс-Сб). Я боролся с этим запросом, и самое близкое, что я могу получить, — это последние 7 дней, используя следующее:

 SELECT * 
 FROM dates 
 WHERE date BETWEEN CURDATE()-INTERVAL 1 WEEK AND CURDATE();
  

Я действительно не уверен, как действовать дальше. Кажется, что мне нужно создать какую-то связь между CURDATE() и предыдущей субботой, может быть?

Любая помощь приветствуется.

Ответ №1:

Вы находитесь после недели года.

Посмотрите на функцию недели: НЕДЕЛЯ (дата[,режим])http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week

Режим описывает, как вы определяете неделю (которая является началом недели) НЕДЕЛЯ (дата, 3) для недели, которая начинается в понедельник.

 SELECT * 
 FROM dates 
 WHERE 
-- Last Week
WEEK(date,3)  = WEEK(CURDATE(),3)-1 

AND YEAR(date)= YEAR(CURDATE())  ;
  

Не забудьте год. Неделя — это просто число от 1 до 52. Итак, год важен!
Приведенный выше код неверен. он завершится неудачей в последнюю неделю года!

Комментарии:

1. Хм — большое вам спасибо за это — однако он выдает пустой result…no выводятся строки.

2. Это может помочь увидеть, как запрос вводит в заблуждение: ВЫБЕРИТЕ *, НЕДЕЛЯ (дата, 3) , НЕДЕЛЯ(CURDATE(), 3)-1 ИЗ порядка дат по ГОДУ (дате) DESC

3. Брайан, спасибо за это. Это дает результаты за каждую неделю, которая начинается с «3», например, 30, 31, 32…