Доступ SQL запрос - выберите диапазон дат из указанного c дня месяца - PullRequest
1 голос
/ 22 марта 2020

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

Так, например - если текущая дата 20 марта, то я бы хотел, чтобы все данные были с 24 февраля по 24 марта, но если дата была более 24 числа в этом месяце, скажем, 30 марта, тогда я хотел бы получить данные с 24 марта по 24 апреля - если это имеет смысл.

Спасибо, Фил

Ответы [ 3 ]

0 голосов
/ 22 марта 2020

С этим выражением:

iif(
  day(date()) >= 24,
  dateserial(year(date()), month(date()), 24),
  dateserial(year(dateadd('m', -1, date())), month(dateadd('m', -1, date())), 24)
)

вы можете получить дату начала вашего состояния (хотя я не уверен насчет знака >=, возможно, это должно быть просто >?), так что используйте это так:

select t.col1, t.col2, ... 
from (
  select *, 
    iif(
      day(date()) >= 24,
      dateserial(year(date()), month(date()), 24),
      dateserial(year(dateadd('m', -1, date())), month(dateadd('m', -1, date())), 24)
    ) as start_date
  from tablename
) as t
where t.date_column between t.start_date and dateadd('m', 1, t.start_date)
0 голосов
/ 22 марта 2020

Для более тонкого метода используйте DateAdd и DateDiff :

Select *
From YourTable
Where DateDiff('m', DateAdd('d', -23, [YourDateField]), DateAdd('d', -23, Date())) = 0
0 голосов
/ 22 марта 2020

Просто вычтите 23 дня и извлеките год и месяц:

select year(dateadd("d", -23, datecol)) as year,
       month(dateadd("d", -23, datecol)) as month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...