0

我从 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满足所有其他条件。谁能告诉我我该怎么做?

谢谢你。

4

1 回答 1

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()在下一个更高级别使用。相同的想法,但没有其余代码,我无法提供代码示例。

于 2013-03-22T14:48:01.690 回答