我有以下查询显示一个包含日期的表:
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
行?
答案 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