日期查询之间的MS访问

时间:2013-01-03 13:59:42

标签: sql ms-access ms-access-2003

我有一个工作正常的查询,但不计算某些日期之间。我的初始查询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之间收集信息。我在哪里错过了船?

1 个答案:

答案 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>