MySQL Query для выбора данных с прошлой недели? - PullRequest
88 голосов
/ 22 мая 2011

Привет, у меня есть таблица с полем даты и другой информацией.Я хочу выбрать все записи за прошлую неделю (неделя начинается с воскресенья).

значения таблицы:

id  date
2   2011-05-14 09:17:25
5   2011-05-16 09:17:25
6   2011-05-17 09:17:25
8   2011-05-20 09:17:25
15  2011-05-22 09:17:25

Я хочу выбрать все идентификаторы с прошлой недели, ожидаемый результат 5, 6, 8. (идентификатор 2 не на прошлой неделе, а идентификатор 15 на текущей неделе.)

Как написать и SQL-запрос для того же.

Ответы [ 19 ]

121 голосов
/ 22 августа 2011
select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();
114 голосов
/ 22 мая 2011
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
17 голосов
/ 26 августа 2016
SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)

Я использую функцию YEARWEEK специально для того, чтобы вернуться на предыдущую целую календарную неделю (вместо 7 дней до сегодняшнего дня). YEARWEEK также позволяет использовать второй аргумент, который задает начало недели или определяет, как обрабатывается первая / последняя неделя года. YEARWEEK позволяет вам хранить количество недель для перехода назад / вперед в одной переменной и не будет включать в себя тот же номер недели, что и в предыдущие / будущие годы, и оно намного короче, чем большинство других ответов здесь.

12 голосов
/ 25 октября 2012

Упрощенная форма:

Данные прошлой недели:

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );

2 недели назад данные:

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 2 AND YEAR( date) = YEAR( current_date );

SQL Fiddle

http://sqlfiddle.com/#!8/6fa6e/2

7 голосов
/ 22 мая 2011

Вы можете сделать свой расчет в php, а затем добавить его к вашему запросу:

$date = date('Y-m-d H:i:s',time()-(7*86400)); // 7 days ago

$sql = "SELECT * FROM table WHERE date <='$date' ";

теперь это даст дату недели назад

3 голосов
/ 27 июля 2016

Вероятно, самый простой способ был бы:

SELECT id
FROM table
WHERE date >= current_date - 7

В течение 8 дней (т.е. с понедельника по понедельник)

2 голосов
/ 22 мая 2011

Вам нужно посчитать, какой день относительно сегодняшнего дня является воскресеньем в вашем промежуточном программном обеспечении (php, python и т. Д.) *

Тогда

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • может бытьспособ получить дату воскресенья относительно сегодняшнего дня в MySQL;это было бы, возможно, более чистое решение, если не слишком дорогое выполнение
2 голосов
/ 03 сентября 2017

Это может быть простой способ, это реальный пример из моего кода и отлично работает:

where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)")
2 голосов
/ 12 октября 2017

ПОЖАЛУЙСТА, люди ... «На прошлой неделе», как спросил ОП, и где я искал (но не нашел ни одного ответа, удовлетворяющего), это ПОСЛЕДНЯЯ НЕДЕЛЯ.

Если сегодня вторник, то ПОСЛЕДНЯЯ НЕДЕЛЯ - это понедельник НЕДЕЛЯ до воскресенья НЕДЕЛЯ .

Итак:

WHERE
    WEEK(yourdate) = WEEK(NOW()) - 1

Или для недель ISO:

WHERE
    WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1
2 голосов
/ 08 сентября 2016

Может быть в одной строке:

SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...