我目前正在尝试完成以下工作:
获取最近6个月的最后一周邮戳,以下是最终结果可能的样子:
Month | Weekstamp |
2013-12| 2013-52 |
2014-01| 2014-05 |
……诸若此类
我有一个辅助表,它包含所有的周,并允许我连接到日历表,而日历表又包含所有的月份,这意味着我能够每月获得所有的周戳。
但是,我如何获得过去6个月的所有上周数据?我的想法是使用一些sor的临时表(从来没有使用过,我是SQL的初学者),它计算每个月需要过滤掉的所有Weekstamp,然后只给出我可以用来过滤包含我需要的所有数据的查询的值。
谁有更好的主意?
正如我所说的,我只是一个初学者,所以我真的不能说最好的方法是什么
提前谢谢你!
发布于 2014-02-21 02:31:39
我猜你的挑战是决定过去的六个月是什么。要做到这一点,您可以使用一个统计表(spt_values)和DateDiff来确定过去六个月的时间。
您还可以根据不同的DB和版本轻松完成此操作,而无需日历或weeks表。
这
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,因此假定SQL Server 2012使用EOMONTH。有关SQL Server的早期版本,请参阅Get the last day of the month in SQL
https://stackoverflow.com/questions/21916217
复制相似问题