从SQL Server 2008中获取过去两个月的星期一的数据

0 人关注

如果今天是2015年7月10日,那么我需要的是SQL Server中的一个记录集,其中有以下记录

 6 JULY 2015
29 JUNE 2015
22 JUNE 2015
15 JUNE 2015
 8 JUNE 2015
 1 JUNE 2015
25 MAY  2015
    
sql-server-2008
date
user2435783
user2435783
发布于 2015-07-10
2 个回答
valex
valex
发布于 2015-07-10
已采纳
0 人赞同

通过下面的表达式,你可以得到最后一个星期一。

CAST(GETDATE()-(@@DATEFIRST-1+DATEPART(weekday,GETDATE())) % 7+1 AS DATE)

这里我们使用@@DATEFIRSTDATEPART(weekday,...)来找到最后一个MONDAY。

然后你应该生成8个(两个月)的天数序列,每个天数比下一个天数早7天。这里我使用了CTE,但你可以使用UNION或从你的DB表中现有的(系统或用户)的TOP8行来生成8行。

;WITH CT(n) AS
    SELECT 0
    UNION ALL
    SELECT n+1 FROM CT WHERE n < 7
SELECT DATEADD(DAY,-n*7,
      CAST(GETDATE()-
           (@@DATEFIRST-1+DATEPART(weekday,GETDATE())) % 7+1 AS DATE))  as DT 
FROM CT ORDER BY n

Sqlfiddle演示

谢谢Valex,你的例子也帮助我理解了递归CTE
SimarjeetSingh Panghlia
SimarjeetSingh Panghlia
发布于 2015-07-10
0 人赞同
;WITH dates AS 
    SELECT CONVERT(datetime,cast(month(getdate())-2 as varchar(2))+'/'+cast(day(getdate()) as varchar(2))+'/'+ cast(year(getdate()) as varchar(4))) as Date,' ' as eid
    UNION ALL
    SELECT DATEADD(d,1,[Date]),' ' as eid
    FROM dates