我有这个查询,它选择跨越 iMAXYears 直到 2012 年 11 月 30 日的所有记录:
SELECT sum([AllocatedAmount]) as total,
datediff(day,transactiondate,'30 Nov 2012') / DaysInyear AS YearDiff
FROM tblGroups
AND datediff(day,transactiondate, '30 Nov 2012') / DaysInyear < iMaxYears
AND not transactiondate > '30 Nov 2012'
GROUP BY g.groupdescription, nominal,
datediff(day,transactiondate, '30 Nov 2012') / DaysInyear
就这个问题而言,2012 年 11 月 30 日是硬编码的(变量名 = lMaxDate),iMaxYears 是 3
我的问题是 DaysInYear 通常具有 365 的值,但在闰年将具有 366 的值。
在像 2012 年这样的闰年,由于 2012 年 2 月 29 日,上述语句不会出现在 2011 年 12 月 1 日。
我知道
DaysInYear=(CASE WHEN (year % 4 = 0 AND year % 100 <> 0)
OR year % 400 = 0 then 366 else 365)
Currently DaysInYear = 365.
我应该创建一个函数
DaysInYear(lYear) where you pass in a year (lYear)
and it returns 365 or 366?
问题是我不能通过 Year(transactiondate),因为这一年总是跨越 2 年的一部分,而 iMaxYears 意味着我们可以在结果集中有 4 个年度期间。
有任何想法吗?谢谢