我目前正在努力完成以下任务:
获取过去6个月的Last Weekstamp,以下说明了最终结果的样子:
Month | Weekstamp |
2013-12| 2013-52 |
2014-01| 2014-05 |
....等等
我有一个辅助表,其中包含所有周,并且允许我连接到日历表,而日历表又包含所有月份,这意味着我能够获得每月的所有周数,
但是如何获得过去6个月的所有上周数字? 我的想法是一些临时表(从未使用过,当它来到SQL时是初学者) 它计算了每个月需要过滤掉的所有Weekstamps,并且只给出了我可以用来过滤包含我需要的所有数据的查询的值。
有人有更好的主意吗?
正如我所说,我只是一个初学者,所以我无法真正说出最好的方式
非常感谢!
答案 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 |
我会留给你格式化值
这假设SQL Server 2012,因为它使用EOMONTH,请参阅Get the last day of the month in SQL以获取以前版本的SQL Server