【问题标题】:Best Practice in Scenario场景最佳实践
【发布时间】:2014-02-20 18:15:27
【问题描述】:

我目前正在尝试完成以下工作:

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

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

....等等

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

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

有人有更好的主意吗?

正如我所说,我只是一个初学者,所以我真的不能说最好的方法是什么

非常感谢!

【问题讨论】:

    标签: sql tsql week-number monthcalendar


    【解决方案1】:

    我的猜测是,您的挑战是确定过去六个月是什么。为此,您可以使用统计表 (spt_values) 和 DateDiff 来确定过去六个月的时间。

    您还可以根据哪个数据库和版本轻松完成此操作,而无需日历或周表。

    这个

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多