场景中的最佳实践

时间:2014-02-20 18:15:28

标签: sql tsql week-number monthcalendar

我目前正在努力完成以下任务:

获取过去6个月的Last Weekstamp,以下说明了最终结果的样子:

Month  | Weekstamp |
2013-12| 2013-52   |
2014-01| 2014-05   |

....等等

我有一个辅助表,其中包含所有周,并且允许我连接到日历表,而日历表又包含所有月份,这意味着我能够获得每月的所有周数,

但是如何获得过去6个月的所有上周数字? 我的想法是一些临时表(从未使用过,当它来到SQL时是初学者) 它计算了每个月需要过滤掉的所有Weekstamps,并且只给出了我可以用来过滤包含我需要的所有数据的查询的值。

有人有更好的主意吗?

正如我所说,我只是一个初学者,所以我无法真正说出最好的方式

非常感谢!

1 个答案:

答案 0 :(得分:0)

我的猜测是,你面临的挑战是确定过去六个月的情况。为此,您可以使用计数表(spt_values)和DateDiff来确定过去六个月的时间。

您还可以根据哪个数据库和版本轻松执行此操作,而无需使用calander或周表。

这个

WITH rnge 
     AS (SELECT number 
         FROM   master..spt_values 
         WHERE  type = 'P' 
                AND number > 0 
                AND number < 7), 
     dates 
     AS (SELECT EOMONTH(Dateadd(m, number * -1, Getdate())) dt 
         FROM   rnge) 
SELECT Year(dt)         year, 
       Month(dt)        month, 
       Datepart(wk, dt) week 
FROM   dates 

生成此输出

| YEAR | MONTH | WEEK |
|------|-------|------|
| 2014 |     1 |    5 |
| 2013 |    12 |   53 |
| 2013 |    11 |   48 |
| 2013 |    10 |   44 |
| 2013 |     9 |   40 |
| 2013 |     8 |   35 |

Demo

我会留给你格式化值

这假设SQL Server 2012,因为它使用EOMONTH,请参阅Get the last day of the month in SQL以获取以前版本的SQL Server