我正在制定一个代码,以吸引过去两年内获得一定评级的所有员工。我一直在研究YEAR(NOW())函数,但我很难设置它。我需要使用NOW函数,因为我需要它从用户访问查询时提取数据。评级在每个下一个月完成(即2013年评级将于2014年2月完成),因此需要阅读类似
的内容YEAR(NOW()-12) but it
这样一来,如果我今天要运行它,那么它将会回归并推动自2013年以来的2012年和2011年的评级尚未完成。
我的整个代码如下:
SELECT dbo_v_TMS_QPR_01_Score.TMS_ID, dbo_v_TMS_QPR_01_Score.QPR_Year, dbo_v_TMS_QPR_01_Score.Final_QPR_Score
FROM O867IA_VJOBHST INNER JOIN dbo_v_TMS_QPR_01_Score ON O867IA_VJOBHST.SYS_EMP_ID_NR = dbo_v_TMS_QPR_01_Score.GEMSID
WHERE (((dbo_v_TMS_QPR_01_Score.Final_QPR_Score)>="1.25") AND ((O867IA_VJOBHST.EMP_ACN_TYP_CD)="HIR") AND ((O867IA_VJOBHST.REC_EFF_STT_DT)=Year(Now()-12)))
GROUP BY dbo_v_TMS_QPR_01_Score.TMS_ID, dbo_v_TMS_QPR_01_Score.QPR_Year, dbo_v_TMS_QPR_01_Score.Final_QPR_Score;
但我一直收到错误:不一致的数据:预计日期GOT号码(#932)
答案 0 :(得分:3)
你所拥有的不起作用。它从当前日期/时间减去12天,然后将其转换为年份。因此,它将返回2013年。
使用dataadd()函数。以下是查询设计器中的空白查询。
我要求今天的日期减去12个月。见下面的输出。
答案 1 :(得分:0)
我想你想要的东西是:
If Month(Now()) > 3 then 'If it's after Feb, we want the last 2 years
LastDayOfPrevYear = DateAdd("d", -1, DateSerial(Year(Now()), 1, 1))
Else 'If it's before March, we want the 2 years prior to last year
LastDayOfPrevYear = DateAdd("d", -1, DateSerial(Year(Now())-1, 1, 1))
End If
SELECT dbo_v_TMS_QPR_01_Score.TMS_ID, dbo_v_TMS_QPR_01_Score.QPR_Year, dbo_v_TMS_QPR_01_Score.Final_QPR_Score
FROM O867IA_VJOBHST INNER JOIN dbo_v_TMS_QPR_01_Score ON O867IA_VJOBHST.SYS_EMP_ID_NR = dbo_v_TMS_QPR_01_Score.GEMSID
WHERE (((dbo_v_TMS_QPR_01_Score.Final_QPR_Score)>="1.25") AND ((O867IA_VJOBHST.EMP_ACN_TYP_CD)="HIR") AND ((O867IA_VJOBHST.REC_EFF_STT_DT)>=DateAdd("m", -24, LastDayOfPrevYear)))
GROUP BY dbo_v_TMS_QPR_01_Score.TMS_ID, dbo_v_TMS_QPR_01_Score.QPR_Year, dbo_v_TMS_QPR_01_Score.Final_QPR_Score;
这将使您从上一年的最后一天起24个月的“滚动”。
这可能需要稍加调整,但至少应该非常接近。