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 に答える