我从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
之间的最新日期所有其他条件。谁能告诉我怎么做到这一点?
谢谢。
答案 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()
。同样的想法,但没有其余代码,我无法提供代码示例。