Я считаю, что термин, который вы ищете, это финансовый год.Здесь год компании отличается от календарного года.
Обратите внимание, что многие люди рекомендуют использовать справочную таблицу вместо ее расчета.Совпадение дат может быть сложным для оптимизации в SQL.
Вот один из способов сделать это.Поиск финансового года и квартала, вероятно, было бы целесообразно добавить в табличную функцию.
DECLARE @userTarget TABLE (UserId VARCHAR(20), Year INT, Quarter INT, Amount INT)
INSERT INTO @userTarget
VALUES
('akshay', 2018, 4, 150)
,('akshay', 2019, 1, 200)
SELECT
s.UserId
,s.Amount
,FY.FiscalYear
,FQ.FiscalQuarter
FROM
(
SELECT
--DATEFROMPARTS(2019, 2, 23)
GETDATE()
AS reportDate
) AS ReportDate
CROSS APPLY (
SELECT
CASE WHEN MONTH(ReportDate.reportDate) < 4 THEN YEAR(ReportDate.reportDate) - 1 -- Fiscal Year begins in April
ELSE YEAR(ReportDate.reportDate)
END AS FiscalYear
) AS FY
CROSS APPLY (
SELECT
DATEDIFF(QUARTER, DATEFROMPARTS(FY.FiscalYear, 4, 1), ReportDate.reportDate) + 1 AS FiscalQuarter
) AS FQ
INNER JOIN @userTarget s
ON s.Year = FY.FiscalYear
AND s.Quarter = FQ.FiscalQuarter
Кроме того, будьте осторожны с датами окончания.last_day >= GETDATE()
не включает последний день.Возьмите в качестве примера конец прошлого квартала, он будет рассчитываться как '2019-03-31 00:00' >= '2019-03-31 08:20'
, что является ложным, если вы хотите, чтобы оно было истинным.