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 верно. Пожалуйста, дайте мне совет по эффективному решению этого дела.


person Grigory Kornilov    schedule 01.03.2013    source источник


Ответы (1)


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

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

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

WHERE date >= SUBDATE(curdate(), WEEKDAY(curdate())) - interval 1 week
AND date < SUBDATE(curdate(), WEEKDAY(curdate()))
person Tom Mac    schedule 01.03.2013