Как выбрать первую неделю предыдущего месяца

Как выбрать первую неделю предыдущего месяца, который я пробовал

$myQuery = "SELECT repairId , startDate,catId,statusId FROM repair 
  WHERE supermarketId = '$supermarket' 
  AND startDate>=(CURDATE()- 1 WEEK - INTERVAL 2 week)";

Это использовалось, чтобы попытаться выбрать третью неделю, но это не сработало.


person RM1664    schedule 20.11.2015    source источник
comment
Добро пожаловать на сайт! Пожалуйста, найдите время, чтобы прочитать раздел справки этого сайта, особенно страницы На какие темы я могу задать здесь? и Какие типы вопросов мне следует избегать? . Также прочитайте о том, как задать хороший вопрос и как создать Минимальный, полный и поддающийся проверке пример.   -  person elixenide    schedule 20.11.2015
comment
Пожалуйста, будьте более конкретными.   -  person angelcool.net    schedule 20.11.2015
comment
Вы можете использовать SELECT BETWEEN stackoverflow.com/questions/5125076/   -  person Gamenotcore    schedule 20.11.2015
comment
Это не сработает, потому что запрос может быть задан из любого месяца, так что мне нужно добавить, чтобы заменить указанные даты?   -  person RM1664    schedule 20.11.2015


Ответы (2)


Это работает для вас:

$myQuery = "SELECT repairId , startDate,catId,statusId FROM repair 
  WHERE supermarketId = '$supermarket' 
  AND startDate>= curdate() - interval 1 month
   - interval weekday(curdate() - interval 1 month) day 
   - interval (day(curdate() - interval 1 month 
   - interval weekday(curdate() - interval 1 month) day) div 7) week 
  AND startDate < curdate() - interval 1 month
   - interval weekday(curdate() - interval 1 month) day 
   - interval (day(curdate() - interval 1 month 
   - interval weekday(curdate() - interval 1 month) day) div 7) week _+ interval 1 week";

?

Идея здесь заключается в том, что мы сначала возвращаемся на месяц назад, затем находим начало недели (при условии, что понедельник, для воскресенья нам потребуется дополнительная настройка), затем вычисляем, сколько целых недель прошло с начала месяца, и вычтите это количество недель из даты до сих пор. Это возвращает нас к началу первой недели месяца. В конце диапазона мы просто добавляем одну неделю к началу.

person Sasha Pachev    schedule 20.11.2015
comment
startDate›=(CURDATE()-INTERVAL 4 неделя) AND startDate‹=(CURDATE()-INTERVAL 3 неделя) ; - person RM1664; 21.11.2015

А, ваш вопрос стал более подробным.

Не совсем знаком с sql, может быть лучше, но что-то вроде:

SELECT repairId , startDate,catId, statusId FROM repair
WHERE EXTRACT(YEAR_MONTH FROM start_date) = EXTRACT(YEAR_MONTH FROM NOW()) - 1 AND CAST(EXTRACT(DAY FROM start_date) / 7 + 1 as INT) = ?;

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

mysql возвращает строки, соответствующие году и месяцу

person Gamenotcore    schedule 20.11.2015