按星期一开始的最新日期过滤SQL结果

时间:2014-08-19 12:05:26

标签: sql sql-server database sql-server-2008 date

我从MS SQL数据库中的4个不同表中选择信息。我已将信息过滤到我现在需要的位置,只选择当前星期一最接近GETDATE()日期的最新表格。 例如,假设我现在提取这些信息:

 Date           | StockCode
----------------+----------             
18/08/2014      | ABC123  
11/08/2014      | 321CBA  
04/08/2014      | 321CBA   
28/07/2014      | ABC123    
11/08/2014      | ABC123
28/07/2014      | TEST123

我需要对其进行过滤以显示此结果:

Date            | StockCode
----------------+----------
18/08/2014      | ABC123   
11/08/2014      | 321CBA   
28/07/2014      | TEST123

感谢您的帮助!非常感激。

2 个答案:

答案 0 :(得分:1)

你可以做到

declare @Monday datetime= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)

Select StockCode,aa.Date
From TableName Main
     OUTER APPLY (Select top 1 Datefrom TableName t 
                where t.StockCode=Main.StockCode
                order by DATEDIFF(d,Date,@Monday)) as aa
Group By StockCode,aa.Date

答案 1 :(得分:0)

答案取决于您希望查询返回的结果数量以及您认为的结果"关闭"到了约会。

如果你想找到所需日期之前和之后最接近的5个日期(在本例中是当周的星期一),那么这将有效:

SELECT TOP 5 
Date,  
StockCode
FROM Table 
Order by abs(datediff("d", Date, DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0))