MySQL - найди один и тот же день каждый месяц - PullRequest
1 голос
/ 13 июля 2011

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

Я буду запускать ежедневное задание cron для сбора всех пользователей, которым требуется вычисленная информация, и яхотел бы захватить всех пользователей за каждый день.

Если бы все пользователи подписались на что-то вроде 2011-01-01

Простой запрос нашел бы это (если вчера был конец периода):

SELECT `user_id` 
FROM `table` 
WHERE DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )

Сложнее, если они зарегистрировались на 2011-03-31

Какой запрос я могу использовать, чтобы убедиться, что на 2011-04-30 они будут найдены?

Я думаю, что-то вроде

SELECT `user_id`
FROM `table`
WHERE 
    DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )
    OR DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) < DAY( `date_created` )
        AND LAST_DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) = DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )

Это не кажется очень эффективным, и я не знаю, сработает ли это (хотя я подозреваю, что это сработает).

Есть ли попытканастоящий метод?Или есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 13 июля 2011

Все, что вам нужно сделать, это проверить, является ли это первое число месяца, если это сделать сравнение >=, в противном случае сделать сравнение =.

WHERE IF(DAY(CURRENT_DATE()) = 1,
    DAY( `date_created` ) >= DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )),
    DAY( `date_created` ) = DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ))
)

Таким образом, 1-го марта будут обновлены пользователи, которые зарегистрировались 28-го числа или после него (не в високосный год).

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