Как выбрать две недели назад в MYSQL? - PullRequest
14 голосов
/ 13 июля 2011

У меня есть отчет, основанный на SQL-запросе, который выглядит следующим образом:

   SELECT batch_log.userid,
         batches.operation_id,
         SUM(TIME_TO_SEC(ramses.batch_log.time_elapsed)),
         SUM(ramses.tasks.estimated_nonrecurring + ramses.tasks.estimated_recurring),
         DATE(start_time)
    FROM batch_log
    JOIN batches ON batch_log.batch_id=batches.id
    JOIN ramses.tasks ON ramses.batch_log.batch_id=ramses.tasks.batch_id
    JOIN protocase.tblusers on ramses.batch_log.userid = protocase.tblusers.userid
   WHERE DATE(ramses.batch_log.start_time) > "2011-02-01" 
     AND ramses.batch_log.time_elapsed > "00:03:00" 
     AND DATE(ramses.batch_log.start_time) < now() 
     AND protocase.tblusers.active = 1
     AND protocase.tblusers.userid NOT in ("ksnow","smanning", "dstapleton")
GROUP BY userid, batches.operation_id, date(start_time)
ORDER BY start_time, userid ASC

Поскольку это сравнение со временем текущего платежного периода, оно вызывает ошибку.
Нашпериоды выплат начинаются в воскресенье, первый период выплат был 2011-02-01, а последний период выплат начался 4-го числа этого месяца.Как вставить это в мое утверждение where, чтобы убрать из запроса самый последний период оплаты?

РЕДАКТИРОВАТЬ: Итак, теперь я использую date_sub (now (), INTERVAL 2 WEEK), но мне действительно нуженособый день недели (воскресенье), так как это среда, в среду это отрубается.

Ответы [ 2 ]

35 голосов
/ 13 июля 2011

Вы хотите использовать DATE_SUB , а в качестве пример .

В частности:

select DATE_SUB(curdate(), INTERVAL 2 WEEK)

получает тебя две недели назад. Вставьте часть DATE_SUB ... в ваш sql, и все готово.

Редактировать за ваш комментарий:

Проверьте DAYOFWEEK:

и вы можете сделать что-то вроде:

DATE_SUB(DATE_SUB(curdate(), INTERVAL 2 WEEK), INTERVAL 2 + DAYOFWEEK(curdate()) DAY)

(У меня нет экземпляра MySql для тестирования на нем, но, по сути, вычтите количество дней после понедельника.)

2 голосов
/ 13 июля 2011

Вопрос не совсем ясен, особенно после редактирования - сейчас неясно, «период оплаты» длится две недели или вы хотите, чтобы последние две недели вернулись с прошлого воскресенья?Я предполагаю, что период составляет две недели ... тогда вам сначала нужно узнать, сколько дней длился последний период (который вы хотите игнорировать, так как он еще не закончился).Чтобы получить это количество дней, вы можете использовать выражение типа

DATEDIFF(today, FirstPeriod) % 14

, где FirstPeriod равно 2011-02-01.И теперь вы удаляете это количество дней с текущей даты в запросе, используя date_sub().Точное выражение зависит от того, как определяется период, но вы должны понять ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...