如何在SQL中返回第二条最新记录?

Dav*_*bak 16 sql sql-server

如果这:

SELECT *
FROM Table
WHERE Date=( SELECT MAX(Date)
             FROM Table
           )
Run Code Online (Sandbox Code Playgroud)

从表中返回最新记录,如何获得第二个最新记录?

ype*_*eᵀᴹ 22

SELECT * 
FROM Table
WHERE Date = ( SELECT MAX(Date) 
               FROM Table
               WHERE Date < ( SELECT MAX(Date) 
                              FROM Table
                            )
             ) ;
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT TOP (1) * 
FROM Table
WHERE Date < ( SELECT MAX(Date) 
               FROM Table
             ) 
ORDER BY Date DESC ;
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT *
FROM
  ( SELECT t.*
         , ROW_NUMBER() OVER(ORDER BY Date DESC) AS RowNumber
    FROM Table t
  ) AS tmp
WHERE RowNumber = 2 ;
Run Code Online (Sandbox Code Playgroud)

如果Date列具有唯一值,则所有三个查询都将给出相同的结果.如果列可以有重复日期,那么它们可能会给出不同的结果(当第1或第2位有关联时).如果在第二位有联系,第一个查询甚至会在结果中给出多行.


Qua*_*unk 7

"select TOP (1) * 
 from Table   
 WHERE Date<(SELECT MAX(Date) FROM Table) 
 ORDER BY Date DESC"
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • SQL Server不支持`LIMIT`子句.请改用"TOP".http://msdn.microsoft.com/en-us/library/ms189463.aspx (3认同)