如何获得两个星期六之前的日期

时间:2014-06-12 15:57:25

标签: sql sql-server

我有以下查询显示一个包含日期的表:

SELECT *
  FROM [Db].[dbo].[btotals]
  ORDER BY [Date] DESC

显示:

Date
06/07/2014
05/31/2014
05/24/2014
05/17/2014
05/10/2014
05/03/2014

如果我选择SELECT TOP 1会给我第一行。我怎样才能修改我的查询,以便在上周前一周获得?在这种情况下5/31/14行?

3 个答案:

答案 0 :(得分:3)

如果您的日期总是相隔一周,并且您只想要第二行,则可以使用ROW_NUMBER()

SELECT  Date
FROM    (   SELECT  Date,
                    RowNumber = ROW_NUMBER() OVER(ORDER BY Date DESC)
            FROM    [Db].[dbo].[btotals]
        ) AS d
WHERE   d.RowNumber = 2;

否则您可以使用以下内容获取2周前的星期六:

SELECT  DATEADD(DAY, -((DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7) - 7, CAST(GETDATE() AS DATE));

然后选择您的第一个日期:

SELECT  TOP 1 Date
FROM    [Db].[dbo].[btotals]
WHERE   Date >= DATEADD(DAY, -((DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7) - 7, CAST(GETDATE() AS DATE))
ORDER BY Date;

答案 1 :(得分:1)

如果您尝试选择第二个日期,这也应该有效,尽管Gareth使用ROW_NUNMBER的方法更好。

SELECT TOP 1 *
FROM (
    SELECT TOP 2 *
    FROM [Db].[dbo].[btotals]
    ORDER BY [Date] DESC
) as X 
ORDER BY Date ASC

答案 2 :(得分:1)

另一种方法:

SELECT TOP 1 *
FROM [Db].[dbo].[btotals]
WHERE [Date] < (SELECT MAX([Date]) FROM [Db].[dbo].[btotals])
ORDER BY [Date] DESC