2013-03-01 1 views
1

Я используюMySQL Попадая отчеты в течение последних рабочей недели

WHERE WEEK(curdate,3)-WEEK(date)=1 

, чтобы получить все строки таблицы, которые записаны на прошлой рабочей недели (с понедельника по воскресенье). Хорошо работает круглый год, но в январе, что будет возвращать 0 в течение некоторого времени, так что я должен принять

WHERE WEEK(curdate,3)+53-WEEK(date) 

в этом случае. Я не могу использовать OR, потому что это будет как информация о текущем году, так и информация в прошлом году, когда они существуют. Я уже пробовал COALESCE и IFNULL методы:

WHERE COALESCE(
    (WEEK(curdate(),3)-WEEK(date,3) = 1), 
    (WEEK(curdate(),3)+53-WEEK(date,3) = 1 
) 

Это хорошо работает в течение всего года, но не обходится случай, когда IFNULL верно. Пожалуйста, дайте мне советы по эффективному обращению с этим случаем.

ответ

0

Вы можете получить дату в понедельник текущей недели с помощью:

select SUBDATE(curdate(), WEEKDAY(curdate())); 

, а затем использовать дату понедельника этой недели и понедельник предыдущей недели в вашем предикате:

WHERE date >= SUBDATE(curdate(), WEEKDAY(curdate())) - interval 1 week 
AND date < SUBDATE(curdate(), WEEKDAY(curdate())) 

 Смежные вопросы

  • Нет связанных вопросов^_^