2011-12-21 47 views

回答

17
SELECT * 
FROM Table 
WHERE Date = (SELECT MAX(Date) 
       FROM Table 
       WHERE Date < (SELECT MAX(Date) 
           FROM Table 
          ) 
      ) ; 

或:

SELECT TOP (1) * 
FROM Table 
WHERE Date < (SELECT MAX(Date) 
       FROM Table 
      ) 
ORDER BY Date DESC ; 

或:

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

如果Date列具有獨特的價值,所有三個查詢可以得到同樣的結果。如果該欄可以有重複的日期,那麼它們可能會給出不同的結果(當第一或第二位有聯繫時)。如果在第二位有聯繫,第一個查詢甚至會給出結果中的多行。

+0

如果日期相同,他們都會返回兩條記錄,對此有何解決方案? – 2011-12-21 13:33:55

+0

第二個和第三個查詢將始終返回1個記錄或無。 – 2011-12-21 13:37:38

+0

所以,這取決於你如何處理關係。當所有行具有相同的日期時,你想要返回什麼? – 2011-12-21 13:41:48

7
"select TOP (1) * 
from Table 
WHERE Date<(SELECT MAX(Date) FROM Table) 
ORDER BY Date DESC" 

應該這樣做。

+0

秩序,它會:除了限制d是不是在SQL 2008 ...但頂部。 – xQbert 2011-12-21 13:13:09

+3

SQL Server中不支持'LIMIT'子句。使用'TOP'代替。 http://msdn.microsoft.com/en-us/library/ms189463.aspx – 2011-12-21 13:13:25

+0

是的,謝謝你的提示!我編輯過它。 – Quasdunk 2011-12-21 13:18:22

1

請檢查這個代碼。

SELECT * FROM category WHERE Created_Time <(SELECT MAX(Created_Time) FROM category) ORDER BY Created_Time DESC LIMIT 1 

Prasad。在SQL

+1

'LIMIT'在** SQL SERVER中不起作用**它是MySQL語法 – 2011-12-21 13:16:48

+0

噢對不起。我的錯。我沒有看到哪個SQL服務器。感謝您注意到這一點。 – 2011-12-21 14:48:27

1

選擇倒數第二個日期:

SELECT MAX(YourDateColumn) FROM YourTable where ColumnId=2 and YourDateColumn < 
(SELECT MAX(YourDateColumn) FROM YourTable where ColumnId=2) 

希望可以幫助別人。

0

按日期倒序排列試試這個

SELECT * 
FROM Table 
WHERE Date = (SELECT MAX(Date) FROM Table 
      WHERE Date < (SELECT MAX(Date) FROM Table) 
     ) ;