-1

我正在设置一个代码来拉动所有在过去 2 年内雇用并获得一定评级的员工。我一直在研究 YEAR(NOW()) 函数,但我很难设置它。我需要使用 NOW 函数,因为我需要它从用户访问查询时提取数据。评分在接下来的 2 月完成(即 2013 年的评分将在 2014 年 2 月完成),因此需要阅读类似

YEAR(NOW()-12) but it

这样,如果我今天运行它,它将返回并拉出 2012 年和 2011 年的收视率,因为 2013 年尚未完成。

我的整个代码如下所示:

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;

但我不断收到错误消息:不一致的数据类型:预期的日期得到编号(#932)

4

2 回答 2

3

你所拥有的不起作用。它从当前日期/时间减去 12 天,然后将其转换为年份。因此,它返回 2013。

使用 dataadd() 函数。以下是查询设计器中的空白查询。

我要求今天的日期减去 12 个月。请参阅下面的输出。

在此处输入图像描述

于 2013-09-09T19:49:57.663 回答
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 个月时间跨度。

这可能需要一些调整,但至少应该非常接近。

于 2013-09-10T12:52:19.583 回答