Запрос записей между рабочими годами - PullRequest
1 голос
/ 03 мая 2020

Бизнес начинается с первого октября каждого года. Мне нужны два запроса: один возвращает все записи за текущий финансовый год, а другой возвращает все записи за предыдущий финансовый год. В этом случае високосный год не важен.

Я написал:

strSql1 = "SELECT * FROM Orders WHERE DateDiff('d', 
[OrderDate], [YearStart])<=365 ORDER BY [OrderDate] ASC"

Me.frmCurrentYear.Form.RecordSource = strSql1

strSql2 = "SELECT * FROM Orders WHERE DateDiff('d', [OrderDate], 
[YearStart])>365 AND DateDiff('d', [PurchaseDate],[YearStart]<=730) ORDER BY 
[OrderDate] ASC"

Me.frmPreviousYear.Form.RecordSource = strSql2 

Вопросы:

  1. Из моего кода мне нужно будет добавить поле YearStart в мою таблицу , Есть ли способ избежать этого?

  2. Будет ли использование BETWEEN более эффективным способом?

С благодарностью.

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

Используйте DateSerial для таких задач: Для года, начинающегося с yyyy/10/01, текущие записи финансового года будут:

strSql1 = "SELECT * FROM Orders " & _
"WHERE DateDiff('m', [OrderDate], DateSerial(Year(Date()), 1, 1)) Between 3 And -9 " & _
"ORDER BY [OrderDate] ASC"

В этом случае записи за предыдущий финансовый год будут:

strSql2 = "SELECT * FROM Orders " & _
"WHERE DateDiff('m', [OrderDate], DateSerial(Year(Date()) - 1, 1, 1)) Between 3 And -9 " & _
"ORDER BY [OrderDate] ASC"
0 голосов
/ 03 мая 2020

Текущий финансовый год определяется как год, когда вы добавляете три месяца:

SELECT *
FROM Orders
WHERE YEAR(DATEADD("m", 3, YEAR(OrderDate))) = YEAR(DATE())

А для предыдущего года:

SELECT *
FROM Orders
WHERE YEAR(DATEADD("m", 3, YEAR(OrderDate))) = YEAR(DATE()) - 1

Предполагается, что январь - декабрь 2020 г. в году "2020" и последние три месяца в году "2021".

0 голосов
/ 03 мая 2020

1- Вы всегда можете рассчитать что-то вроде того, если месяц октябрь, ноябрь или де c, то текущий год или предыдущий год.

case when Month(GetDate()) >=10 then Cast('10-01'+Cast(Year(GetDate() as Varchar(5)) as date)
     when Month(GetDate()) <10 then Cast('10-01'+Cast(Year(GetDate())-1 as varcher(5)) as date) 
END as YearStart

2- SQL: МЕЖДУ против < = и> =

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