2014-10-23 13 views
0

У меня есть таблица, к которой я пытаюсь присоединиться, на основе идентификатора, однако я хочу присоединиться только к строкам с максимальным «PeriodDT» (столбцом datetime) для этого идентификатора.Присоединиться к максимальной дате

Я попытался с помощью Top 1 заказ, что «PeriodDT», однако это только позволит мне выбрать один столбец или я получаю сообщение об ошибке:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS

Вот запрос я использовал:

Select a.Name as PropertyName, 
     a.PropertyNum as PropertyNum, 
     a.City as City, 
     a.State as State, 
     b.Name as LoanName, 
     b.LoanNum, 
     (select Top 1 c.IntRate as IntRate, 
     c.MaturityDT  
     from vNoteDetail c where c.LoanID = b.LoanID Order By c.PeriodDT DESC) 
from vProperty a join vLoan b on a.LoanID = b.LoanId 

Есть ли лучший способ сделать это?

ответ

0

попробовать это ..

;WITH cte 
    AS (SELECT Row_number() OVER(partition BY clientid ORDER BY perioddt DESC) rn, 
       intrate, 
       perioddt     MaturityDT, 
       loanid 
     FROM vnotedetail) 
SELECT a.NAME  AS PropertyName, 
     a.propertynum AS PropertyNum, 
     a.city  AS City, 
     a.state  AS State, 
     b.NAME  AS LoanName, 
     b.loannum, 
     c.intrate, 
     c.maturitydt, 
FROM vproperty a 
     JOIN vloan b 
     ON a.loanid = b.loanid 
     JOIN cte c 
     ON c.loanid = b.loanid 
WHERE c.rn = 1 

FYI ограничения подзапроса CHECK THIS

0

Попробуйте

Select a.Name as PropertyName, 
    a.PropertyNum as PropertyNum, 
    a.City as City, 
    a.State as State, 
    b.Name as LoanName, 
    b.LoanNum, 
    v1.IntRate, 
    v1.MaturityDT  
from vProperty a join vLoan b on a.LoanID = b.LoanId 
CROSS APPLY   (select Top 1 c.IntRate as IntRate, 
    c.MaturityDT  
    from vNoteDetail c where c.LoanID = b.LoanID Order By c.PeriodDT DESC) AS V1