Ответ 1
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
Привет У меня есть таблица с полем даты и другой информацией. Я хочу выбрать все записи за последнюю неделю (начало недели с воскресенья).
значения таблиц:
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. (id 2 не на прошлой неделе, а id 15 - на текущей неделе.)
Как писать и SQL-запрос для того же самого.
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();
SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)
Я использую функцию YEARWEEK специально для возврата к предыдущей цельной календарной неделе (в отличие от 7 дней до сегодняшнего дня). YEARWEEK также разрешает второй аргумент, который установит начало недели или определит, как обрабатывается первая/последняя неделя года. YEARWEEK позволяет вам удерживать количество недель, чтобы вернуться/вперед в одной переменной и не будет включать номер той же недели из предыдущих/будущих лет, и это намного короче, чем большинство других ответов здесь.
Упрощенная форма:
Данные за прошлую неделю:
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
Вы можете сделать свой расчет в php, а затем добавить его в свой запрос:
$date = date('Y-m-d H:i:s',time()-(7*86400)); // 7 days ago
$sql = "SELECT * FROM table WHERE date <='$date' ";
теперь это даст дату на неделю назад
Вероятно, самый простой способ:
SELECT id
FROM table
WHERE date >= current_date - 7
В течение 8 дней (т.е. понедельник - понедельник)
Вам нужно будет вычислить, какой день по сравнению с сегодняшним днем - в воскресенье в вашем промежуточном программном обеспечении (php, python и т.д.) *
Затем
select id
from table
where date >= "$sunday-date" + interval 7 DAY
Он может быть в одной строке:
SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()
Простым способом может быть этот, это настоящий пример из моего кода и отлично работает:
where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)")
ПОЖАЛУЙСТА, люди... "На прошлой неделе", как и спросил ОП, и где я искал (но не нашел ни одного ответа, удовлетворяющего), - ПОСЛЕДНЯЯ НЕДЕЛЯ.
Если сегодня вторник, то ПОСЛЕДНЯЯ НЕДЕЛЯ - ПОСЛЕДНИЕ НЕДЕЛИ ВЕКА НА ВЕЧЕРНУЮ АГРОКУ.
Итак:
WHERE
WEEK(yourdate) = WEEK(NOW()) - 1
Или для недель ISO:
WHERE
WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1
Вышеприведенный запрос не будет работать.
После предложения where
, если мы не можем CAST
значение столбца, это не сработает. Вы должны CAST
значение столбца.
например:.
SELECT.....
WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE )
SELECT id FROM tb1
WHERE
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week )
Я часто делаю быструю проверку на прошлой неделе, и следующее имеет тенденцию работать хорошо для меня и включает в себя сегодня.
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = Getdate() - 7 /* Seven Days Earlier */
SET @EndDate = Getdate() /* Now */
SELECT id
FROM mytable
WHERE date BETWEEN @StartDate AND @Enddate
Если вы хотите, чтобы это НЕ включалось сегодня, просто вычтите дополнительный день из @EndDate. Если я сейчас выберу эти две переменные, получим
@StartDate 2015-11-16 16: 34: 05.347/* Последний понедельник */
@EndDate 2015-11-23 16: 34: 05.347/* В этот понедельник */
Если бы я хотел воскресенье до воскресенья, у меня было бы следующее.
SET @StartDate = Getdate() - 8 /* Eight Days Earlier */
SET @EndDate = Getdate() - 1 /* Yesterday */
@StartDate 2015-11-15 16: 34: 05.347/* Предыдущее воскресенье */
@EndDate 2015-11-22 16: 34: 05.347/* Последнее воскресенье */
WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;
Вы также можете использовать его esay way
SELECT *
FROM inventory
WHERE YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)
i Используйте это для начала недели с SUNDAY:
SELECT id FROM tbl
WHERE
date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY
Получить последнюю неделю записи
Используя приведенный ниже запрос MySQL для извлечения записей за последнюю неделю из таблицы базы данных mysql.
SELECT name, created_at
FROM employees
WHERE
YEARWEEK('created_at', 1) = YEARWEEK( CURDATE() - INTERVAL 1 WEEK, 1)
Попробуйте следующее:
Declare @Daytype varchar(15),
@StartDate datetime,
@EndDate datetime
set @Daytype = datename(dw, getdate())
if @Daytype= 'Monday'
begin
set @StartDate = getdate()-7
set @EndDate = getdate()-1
end
else if @Daytype = 'Tuesday'
begin
set @StartDate = getdate()-8
set @EndDate = getdate()-2
end
Else if @Daytype = 'Wednesday'
begin
set @StartDate = getdate()-9
set @EndDate = getdate()-3
end
Else if @Daytype = 'Thursday'
begin
set @StartDate = getdate()-10
set @EndDate = getdate()-4
end
Else if @Daytype = 'Friday'
begin
set @StartDate = getdate()-11
set @EndDate = getdate()-5
end
Else if @Daytype = 'Saturday'
begin
set @StartDate = getdate()-12
set @EndDate = getdate()-6
end
Else if @Daytype = 'Sunday'
begin
set @StartDate = getdate()-13
set @EndDate = getdate()-7
end
select @StartDate,@EndDate
Если вы уже знаете даты, вы можете просто использовать между ними, например:
SELECT id
FROM `Mytable`
where MyDate BETWEEN "2011-05-15" AND "2011-05-21"