Выбор записей с учетом будущих дат в mysql - PullRequest
0 голосов
/ 30 января 2020

Я использовал следующий оператор выбора , чтобы выбрать сумму суммы, не предполагая будущих дат. Как изменить это утверждение, чтобы включить будущие даты?

SELECT SUM(amount) as allPreviousAmount 
FROM `fn_table`
WHERE MONTH(transdate) < ? OR YEAR(transdate) < 2019 )

? представляет номер месяца. У меня есть данные за 2018, 2019 и 2020 годы. Теперь я хочу выбрать все данные до февраля 2019 года. Как мне их выбрать? Проблема в том, что это также отбор данных в 2020 году.

1 Ответ

1 голос
/ 30 января 2020

Относится к вашему существующему запросу, конечно, вам нужно И, а не ИЛИ, чтобы гарантировать отсутствие будущих дат? Скажем, это июль 2020 года, а у вас дата января 2021 года, которая в будущем. Если вы скажете MONTH('jan-2021') < MONTH('jul-2020') OR YEAR('jan-2021') < YEAR('jul-2020'), тогда это будет правдой, потому что январь раньше, чем июль, поэтому будет возвращена будущая дата января 2021 года

Не совсем уверен, почему вы не просто WHERE transdate < CURRENT_DATE(), если только в этот день Месяц также классифицируется как будущая дата ... (требуя, чтобы месяц и год были меньше текущей даты, если это 13 июля 2020 г., вы получите записи только до конца июня 2020 г., если учитывать месяц и только год)

Но чтобы включить все даты прошлого и будущего, просто полностью удалите предложение WHERE


Изменить в ответ на комментарий:

Если вы хотите запросить это дает "все данные до 01 июля 2005 года, но не включая его", затем выполните:

WHERE transdate < ?

И в своем интерфейсе укажите параметр типа даты 01-Jul-2005. Можно указать любую дату, но для того, чтобы обрезать ее в конце определенного месяца, укажите дату, которая является первым днем ​​некоторого месяца

Вы можете повторно использовать тот же запрос и для будущих дат, указав дату, превышающую любую возможная дата в таблице, например 01-Янв-3000

...