T-SQL,可能结合MAX和BETWEEN?

时间:2013-03-22 14:42:28

标签: sql sql-server tsql

我从SQL Server中的SQL查询中摘录如下:

 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之间的最新日期所有其他条件。谁能告诉我怎么做到这一点?

谢谢。

1 个答案:

答案 0 :(得分: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()。同样的想法,但没有其余代码,我无法提供代码示例。