我正在尝试编写一个脚本,该脚本将返回该季度的第一天和一周的最后一天,即 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。任何想法或提示都会有帮助,谢谢
根据一些疯狂的猜测,未经任何测试,我建议:
;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