2013-03-22 67 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()。同樣的想法,但沒有其他代碼,我無法提供代碼示例。