powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос, чтобы получить все строки за предыдущий месяц
11 сообщений из 11, страница 1 из 1
Запрос, чтобы получить все строки за предыдущий месяц
    #39933711
skydog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно выбрать все строки в моей базе данных, которые были созданы в прошлом месяце.
Например, если текущий месяц январь, то я хочу вернуть все строки, созданные в декабре, если месяц февраль, то я хочу вернуть все строки, созданные в январе. У меня есть date_created столбец в моей базе данных , которая содержит список дат , созданные в этом формате: 2007-06-05 14:50:17.
Сейчас у меня строка
Код: sql
1.
AND oi.created_at > DATE(NOW()) - INTERVAL 1 month 
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39933855
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
WHERE DATE(datetimefield) 
    BETWEEN LAST_DAY(CURRENT_DATE - INTERVAL 2 MONTH) + INTERVAL 1 DAY
        AND LAST_DAY(CURRENT_DATE - INTERVAL 1 MONTH)


Если поле имеет тип DATE, то применение к нему функции DATE(), само собой, излишне.
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39933917
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
where LAST_DAY(oi.created_at) = LAST_DAY(NOW() - INTERVAL 1 month)
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39934078
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov
Код: sql
1.
where LAST_DAY(oi.created_at) = LAST_DAY(NOW() - INTERVAL 1 month)


Сори, вопрос немножко не в тему. А оптимизатор посчитает LAST_DAY(NOW() - INTERVAL 1 month) один раз? И как поведет себя запрос, если во время его выполнения NOW() перескочит на следующий месяц?
Может имеет смысл сделать что-то типа FROM (SELECT @a:=LAST_DAY(NOW() - INTERVAL 1 month)) AS z и в WHERE использовать уже переменную?
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39934136
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
должен посчитать один раз
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html Functions that return the current date or time each are evaluated only once per query at the start of query execution. This means that multiple references to a function such as NOW() within a single query always produce the same result.
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39934290
skydog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо! Очень оперативно!
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39934313
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
должен посчитать один раз
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39934419
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, )). А NOW() отрабатывает один раз
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39934441
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

да, по ссылке из док-и все это указано в примерах, что NOW() константа, а SYSDATE() динамика
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39934462
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov , это я для восстановления справедливости... почему-то мануалописатели решили, что уж коли они обговорили эту особенность в описании функции, то в общей части вроде как указывать на наличие такой особенной функции и не надо. Хотя по-хорошему-то как раз именно тут и надо.
...
Рейтинг: 0 / 0
Запрос, чтобы получить все строки за предыдущий месяц
    #39935024
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,
справедливости ради
CURDATE() = CURRENT_DATE()
CURTIME() = CURRENT_TIME()
тоже высчитывается один раз
я чаще использую NOW() в силу привычки
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос, чтобы получить все строки за предыдущий месяц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]