2016-08-26 1 views
1

Я пытаюсь вернуть вторую самую последнюю дату для набора проектов в SQL, но я получаю ошибку «Только одно выражение может быть указано в списке выбора, когда подзапрос не вводится с EXISTS. ' Вот мой код:Найти 2-ое последнее время SQL с JOINS

SELECT ProjectId, max(CreatedDateTime) 
    FROM NTNote.dbo.nProjectReference P          
    INNER JOIN NTNote.dbo.nJournal J         
     ON J.JournalID = P.JournalID 
     Where CreatedDateTime < (SELECT max(CreatedDateTime), projectid 
     FROM NTNote.dbo.nProjectReference P         
      INNER JOIN NTNote.dbo.nJournal J         
      ON J.JournalID = P.JournalID 
      Group by ProjectId) 
     Group by ProjectId 

Любая помощь будет принята с благодарностью!

ответ

3

используйте приведенный ниже код для получения желаемого результата (sql-сервер).

with cte_grp 
as 
(SELECT ProjectId,CreatedDateTime,ROW_NUMBER() OVER(PARTITION BY ProjectId ORDER BY CreatedDateTime desc) RNo 
    FROM NTNote.dbo.nProjectReference P          
    INNER JOIN NTNote.dbo.nJournal J         
     ON J.JournalID = P.JournalID) 

     SELECT * 
     FROM cte_grp 
     WHERE RNO=2 
+0

Работает отлично! Благодаря! – reggie86

0

Вы можете использовать

Row_Number() over (partition by ProjectId order by CreatedDateTime desc) as rownum 

и использовать 2 в качестве предиката, чтобы получить выход.