Как сформировать SQL-запрос, используя DATE_SUB, чтобы проверить вчерашние данные ИЛИ, если это понедельник, проверить данные за пятницу? - PullRequest
1 голос
/ 21 августа 2009

Вот мой запрос:

SELECT *
FROM daily_records 
AND date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)

Я использую это, чтобы создать отчет обо всем, что произошло вчера. Это прекрасно работает, вторник-пятница. Однако по понедельникам я хочу, чтобы он мог выполнять поиск в пятницу (предыдущий рабочий день, например, INTERVAL 3 DAY).

Есть ли способ сделать это в MySQL? Или мне просто нужно проверить день недели в PHP перед написанием запроса?

Ответы [ 3 ]

3 голосов
/ 21 августа 2009

Это должно сделать это:

SELECT * FROM daily_records AND date =
DATE_SUB(CURDATE(), INTERVAL IF(DATE_FORMAT(NOW(), '%w') = 1, 3, 1) DAY)
3 голосов
/ 21 августа 2009

Вы могли бы сделать ...

SELECT *
FROM daily_records
WHERE date = IF(DAYOFWEEK(CURDATE()) = 2, DATE_SUB(CURDATE(), INTERVAL 3 DAY), DATE_SUB(CURDATE(), INTERVAL 1 DAY))
0 голосов
/ 21 августа 2009
mysql> create function PREV_BIZ_DATE ()
    -> returns DATE
    -> return (CURRENT_DATE() - interval if(DAYOFWEEK(CURRENT_DATE()) = 2, 3, 1) day);

mysql> SELECT * FROM daily_records WHERE date = PREV_BIZ_DATE();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...