#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…