2013-03-22 63 views
0

我有一个SQL查询SQL Server中的以下摘录:T-SQL,可能结合MAX和BETWEEN?

LEFT JOIN tbl_StuAssess SA (NOLOCK) 
    ON CA.ASMT_PK = SA.ASMT_PK 
     AND SA.DELT_FLAG = 0 
     AND CA.SCRE_MTOD_PK = SA.SCRE_MTOD_PK 
     AND CVS.STUD_PK = SA.STUD_PK 
     AND(SA.ASMT_DATE BETWEEN @YearStartDate AND @YearEndDate) 

这里是我的问题,如果第4个条件我遇到了,我想最后一个条件(SA.ASMT_DATE BETWEEN @YearStartDate AND @YearEndDate)只返回在最新的日期在@YearStartDate@YearEndDate之间,并符合所有其他条件。谁能告诉我我该怎么做?

谢谢。

+0

SELECT语句在哪里? – MikeSmithDev 2013-03-22 14:47:35

+0

查询的其余部分是什么? – 2013-03-22 14:48:06

回答

2

您可以使用子查询也有可能做到这一点:

LEFT JOIN 
(select sa.*, 
     row_number() over (partition by asmt_pk, scre_mtod_pk, stud_pk order by asmt_dt desc) as seqnum 
from tbl_StuAssess SA (NOLOCK) 
where SA.DELT_FLAG = 0 and (SA.ASMT_DATE BETWEEN @YearStartDate AND @YearEndDate)) 
) sa 
ON CA.ASMT_PK = SA.ASMT_PK and 
    CA.SCRE_MTOD_PK = SA.SCRE_MTOD_PK and 
    CVS.STUD_PK = SA.STUD_PK and 
    sa.seqnum = 1 

此计算加入前的最后日期。如果加入条件没有筛选出某个给定组asmt_pk, scre_mtod_pk, stud_pk的某些组记录但不是全部记录,则此方法有效。

另一种方法是在上一级使用row_number()。同样的想法,但没有其他代码,我无法提供代码示例。