0

我有一个工作正常的查询,除了在某些日期之间不计算。我最初的查询 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-2012 和今年 5-20-2013 之间的信息。我在哪里错过了船?

4

1 回答 1

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 年),因此结果为 20th May 2013
因此,您正在有效地加载 2013 年 5 月 20 日至 2013 年 5 月 20 日的数据!

我的代码 ( Year(Date())-1) 获取今天日期的年份 (2013) 并从中减去 1 (--> 2012),因此结果是 20th May 2012

于 2013-01-03T14:04:38.753 回答