代表季度中几周的问题

问题描述 投票:0回答:1

我正在尝试编写一个脚本,该脚本将返回该季度的第一天和一周的最后一天,即 04/01-04/06,该季度每周的第一天和最后一天,例如 06/ 23-06-29 以及该季度的最后一周,例如 06/30 或 12/29-12/31。

SELECT [Date_Key]
      ,[Date]
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofWeek AND LastDateofWeek 
            THEN FORMAT([Month], '00') + '/' + FORMAT([Day], '00') 
            ELSE '' 
        END AS [Week_Date_Axis]
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofWeek AND LastDateofWeek 
            THEN [Month] * 100 + [Day] 
            ELSE 0 
        END AS [Week_Date_Axis_SK]
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofMonth AND LastDateofMonth 
            THEN FORMAT([Month], '00') + '/' + FORMAT([Day], '00') 
            ELSE '' 
        END AS [Month_Date_Axis]
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofMonth AND LastDateofMonth 
            THEN [Month] * 100 + [Day] 
            ELSE 0 
        END AS [Month_Date_Axis_SK]  
----this section is where I'm having a hard time
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofQuarter AND LastDateofQuarter 
            THEN FORMAT(DATEPART(MONTH, dateadd(DAY,0,[FirstDateofWeek])), '00') + '/' + FORMAT(DATEPART(DAY, dateadd(DAY,0,[FirstDateofWeek])), '00') + '-' + 
                 FORMAT(DATEPART(MONTH, dateadd(DAY,0,[FirstDateofWeek])), '00') + '/' + FORMAT(DATEPART(DAY, dateadd(DAY,0,[LastDateofWeek])), '00')
            ELSE '' 
        END AS [Quarter_Date_Axis]
    ---- End of hard time
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofQuarter AND LastDateofQuarter 
            THEN [Month] * 100 + [Day] 
            ELSE 0 
        END AS [Quarter_Date_Axis_SK]
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofYear AND LastDateofYear 
            THEN FORMAT(DATEPART(MONTH, dateadd(DAY, 0, [FirstDateofMonth])), '00') + '/' + FORMAT(DATEPART(DAY, dateadd(DAY, 0, [FirstDateofMonth])), '00') 
            ELSE '' 
        END AS [Year_Date_Axis]
      , CASE 
            WHEN GETDATE() BETWEEN FirstDateofYear AND LastDateofYear 
            THEN [Month] * 100 + [Day] 
            ELSE 0 
        END AS [Year_Date_Axis_SK]
      ,[Day]
      ,[Weekday]
      ,[WeekDayName]
      ,[WeekDayName_Short]
      ,[WeekDayName_FirstLetter]
      ,[DOWInMonth]
      ,[DayOfYear]
      ,[WeekOfMonth]
      ,DATEPART(ISO_WEEK, DATE) AS [WeekOfYear]
      ,[Month]
      ,[MonthName]
      ,[MonthName_Short]
      ,[MonthName_FirstLetter]
      ,[Quarter]
      ,[QuarterName]
      ,[Year]
FROM [dbo].[Tbl_Date_Dim]
WHERE [Year] = YEAR(GETDATE())

----Available date dim columns
       [Date]
      ,[Day]
      ,[DaySuffix]
      ,[Weekday]
      ,[WeekDayName]
      ,[WeekDayName_Short]
      ,[WeekDayName_FirstLetter]
      ,[DOWInMonth]
      ,[DayOfYear]
      ,[WeekOfMonth]
      ,[WeekOfYear]
      ,[Month]
      ,[MonthName]
      ,[MonthName_Short]
      ,[MonthName_FirstLetter]
      ,[Quarter]
      ,[QuarterName]
      ,[Year]
      ,[MMYYYY]
      ,[MonthYear]
      ,[FinancialYear]
      ,[FinancialQuarter]
      ,[FinancialMonth]
      ,[FirstDateofYear]
      ,[LastDateofYear]
      ,[FirstDateofQuarter]
      ,[LastDateofQuarter]
      ,[FirstDateofMonth]
      ,[LastDateofMonth]
      ,[FirstDateofWeek]
      ,[LastDateofWeek]
      ,[CurrentYear]
      ,[CurrentQuarter]
      ,[CurrentMonth]
      ,[CurrentWeek]
      ,[CurrentDay]

我们的周从星期日开始,因此我返回 03/31(星期日)作为季度的开始,这是错误的,应该是 04/01(星期一)。我也没有得到滚动月份,例如,05/26-05/01 应该是 05/26-06/01,最后该季度的最后一周显示为 06/30-06/06,而它应该是只是06/30。任何想法或提示都会有帮助,谢谢

从脚本返回

sql sql-server t-sql
1个回答
0
投票

根据一些疯狂的猜测,未经任何测试,我建议:

;WITH strings AS(
SELECT
  Year
  ,Quarter
  ,WeekOfYear
  ,string = FORMAT(MIN(Date), 'MM/dd', 'en-US') + '-' + FORMAT(MAX(Date), 'MM/dd', 'en-US') 
FROM Tbl_Date_dim
GROUP BY
  Year
  ,Quarter
  ,WeekOfYear
)
SELECT
  d.*
  ,s.string
FROM Tbl_Date_dim d
JOIN strings s
  ON d.Year = s.Year
     AND d.Quarter = s.Quarter
     AND d.WeekOfYear = s.WeekOfYear
© www.soinside.com 2019 - 2024. All rights reserved.