Подтвердить что ты не робот

Как выбрать две недели назад в MYSQL?

У меня есть отчет, который управляется запросом 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

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

EDIT: теперь я использую date_sub (now(), INTERVAL 2 WEEK), но мне действительно нужен конкретный день недели (ВОСКРЕСЕНЬЕ), так как в среду он прерывает его в среду.

4b9b3361

Ответ 1

Вы хотите использовать 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

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

DATEDIFF(today, FirstPeriod) % 14

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