2014-10-08 185 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

相关问题