2014-10-08 232 views
2

我有了這樣一個[ArchiveDate]列的表:SQL - 選擇倒數第二個日期

ArchiveDate 
2014-10-06 
2014-10-06 
2014-10-06 
2014-10-01 
2014-10-01 
2014-10-01 
2014-10-01 
2014-05-22 
2014-05-22 

我要選擇倒數第二個日期,但是當我使用:

select max([ArchiveDate]) -1 'previousweek' 
from [PipelineArchive] 

我獲得2014-10-05(該列不存在),而不是2014-10-01。

我不知道如何編碼,以選擇「最後一個」;任何幫助都感激不盡!

謝謝。

+1

'SELECT * FROM ArchiveDate ORDER BY ArchiveDate DESC LIMIT 2,1',或者任何你的db等價的'limit'。 – 2014-10-08 14:57:32

+1

@MarcB:可能SQL-Server – 2014-10-08 14:58:10

回答

5

您需要按照ArchiveDate的降序排序,跳過一條記錄,然後進行下一條記錄。例如,在SQL Server 2012中,你可以這樣來做:

SELECT DISTINCT [ArchiveDate] 
FROM [PipelineArchive] 
ORDER BY [ArchiveDate] DESC 
OFFSET (1) ROWS FETCH NEXT (1) ROWS ONLY 

Demo.

+0

輝煌,感謝您的幫助:-) – user1811852 2014-10-08 15:47:54

1
SELECT distinct([ArchiveDate]) 
FROM [PipelineArchive] 
WHERE [ArchiveDate] = (SELECT MAX([ArchiveDate]) AS second 
         FROM [PipelineArchive] 
         WHERE [ArchiveDate] < (SELECT MAX([ArchiveDate]) AS first 
               FROM [PipelineArchive]) 
         ) 

的最近日期是:

SELECT MAX([ArchiveDate]) AS first FROM [PipelineArchive] 

最大日起不少於那就是:

(SELECT MAX([ArchiveDate]) AS second 
FROM [PipelineArchive] 
WHERE [ArchiveDate] < (SELECT MAX([ArchiveDate]) AS first 
         FROM [PipelineArchive])) 

PRO

  • 它的(相當)標準的SQL

CON

  • 它不能簡單地推廣到n個日期
+0

超級,非常感謝和工作的一種享受:-)謝謝。 – user1811852 2014-10-08 15:48:26

相關問題