MAX日期小于另一个日期

时间:2013-09-23 20:06:16

标签: ms-access

我正在努力确定2007-2013期间培训课程的参加人数。我需要它来拉动他们在这段时间内所在的员工工作组:

SELECT O867IA_VJOBHST.JOB_CLS_CD, O867IA_VJOBHST.DIS_NR, 
Sum(IIf(emp_tng_stt_dt Between #1/1/2007# And #12/31/2011#,1,0)) AS [2007-2011], 
Sum(IIf(emp_tng_stt_dt Between #1/1/2011# And #12/31/2011#,1,0)) AS 2011, 
Sum(IIf(emp_tng_stt_dt Between #1/1/2012# And #12/31/2012#,1,0)) AS 2012, 
Sum(IIf(emp_tng_stt_dt Between #1/1/2013# And #9/23/2013#,1,0)) AS 2013, O867IA_VJOBHST.REC_EFF_STT_DT, O867IA_VTRAING.EMP_TNG_STT_DT
FROM (O867IA_VJOBHST INNER JOIN O867IA_VTRAING ON O867IA_VJOBHST.SYS_EMP_ID_NR = O867IA_VTRAING.SYS_EMP_ID_NR) INNER JOIN O867IA_VPJOBCO ON O867IA_VJOBHST.JOB_CLS_CD = O867IA_VPJOBCO.JOB_CLS_CD
WHERE (((O867IA_VTRAING.REG_NR)="03") AND ((O867IA_VTRAING.TNG_SYS_NR)="0918") AND ((O867IA_VPJOBCO.JOB_GRP_CD)="61"))
GROUP BY O867IA_VJOBHST.JOB_CLS_CD, O867IA_VJOBHST.DIS_NR, O867IA_VJOBHST.REC_EFF_STT_DT, O867IA_VTRAING.EMP_TNG_STT_DT;

REC_EFF_STT_DT字段是他们在工作中记录的日期,因此我试图将其作为MAX日期,并且需要小于EMP_TNG_STT_DT,这是培训课程的举办时间。我尝试将其设置为(((O867IA_VJOBHST.REC_EFF_STT_DT)< [O867IA_VTRAING]。[EMP_TNG_STT_DT]));但每当我将MAX添加到REC EFF STT DT时,它一直给我一个错误“你试图执行一个不包含指定表达式的查询”。我找不到任何解决方案,需要帮助。

1 个答案:

答案 0 :(得分:0)

如果您的((MAX(O867IA_VJOBHST.REC_EFF_STT_DT) < [O867IA_VTRAING].[EMP_TNG_STT_DT]))给出了此错误,那么它可能也在您的SELECT列表中,而不仅仅是'clause. Try removing it from your SELECT列表。

另一个建议是[O867IA_VTRAING].[EMP_TNG_STT_DT]未汇总。您也可以通过聚合来实现这一点。如果您想要未更改的值,FIRST()可能会有效。