我有一个工作正常的查询,但不计算某些日期之间。我的初始查询SQL是
SELECT
Roster.UserID,
SchedulingLog.Category,
Sum(IIf([CatDetail] Like '*Gain*',[Value],0)) AS Gain,
Sum(IIf([CatDetail] Like '*Used*',[Value],0))+Sum(IIf([CatDetail] Like 'Adj*',[Value],0)) AS Used,
[Gain]+[Used] AS [Left]
FROM SchedulingLog INNER JOIN Roster ON SchedulingLog.UserID = Roster.UserID
WHERE (((SchedulingLog.EventDate)>DateSerial(Year(Date()),5,20)))
GROUP BY Roster.UserID, SchedulingLog.Category
HAVING (((SchedulingLog.Category) Like "DH*" Or (SchedulingLog.Category) Like "Comp*"));
此SQL工作正常,直到新的一年。我已在WHERE
语句中修改了我的代码以使用BETWEEN
限定符,但我无法使其工作。这是新的SQL ...
SELECT
Roster.UserID,
SchedulingLog.Category,
Sum(IIf([CatDetail] Like '*Gain*',[Value],0)) AS Gain,
Sum(IIf([CatDetail] Like '*Used*',[Value],0))+Sum(IIf([CatDetail] Like 'Adj*',[Value],0)) AS Used,
[Gain]+[Used] AS [Left]
FROM SchedulingLog INNER JOIN Roster ON SchedulingLog.UserID = Roster.UserID
WHERE (((SchedulingLog.EventDate) Between DateSerial(Year(Date()-1),5,20) And DateSerial(Year(Date()),5,20)))
GROUP BY Roster.UserID, SchedulingLog.Category
HAVING (((SchedulingLog.Category) Like "DH*" Or (SchedulingLog.Category) Like "Comp*"));
新SQL的目的是在去年5-20-20到今年5-20-20之间收集信息。我在哪里错过了船?
答案 0 :(得分:2)
你的错误在这里:
DateSerial(Year(Date()-1),5,20)
应该是:
DateSerial(Year(Date())-1,5,20)
只需在立即窗口中输出两个语句即可看到差异。
您的代码(Year(Date()-1)
)从今天的日期(2013年1月3日 - 1 = 2013年1月2日!!)减去1并从那一年(2013年)开始减去年度,因此结果是5月20日 2013 即可。
因此,您有效地从2013年5月20日到2013年5月20日加载数据!
我的代码(Year(Date())-1
)获取今天的日期(2013年)并从中减去1( - &gt; 2012),因此结果是5月20日 2012 。< / p>