SQL - 每年定期休假
SQL - recurring holiday period on a yearly basis
我的国家每年都有特定的假期,持续 46 天。
我正在编写一个代码,该代码将 return 每年该假期的日期范围。
起点是 'easter' 的开始,我从中减去 46 天。
目前代码只允许我区分一年的期望期
SELECT * FROM TIME_DIM
WHERE DATE BETWEEN (SELECT TOP 1 DATEADD(day, -46, DATE) as DATE FROM TIME_DIM
WHERE HOLIDAY = 'EASTER' ORDER BY DATE)
AND (SELECT TOP 1 DATE FROM TIME_DIM
WHERE HOLIDAY = 'EASTER' ORDER BY DATE ORDER BY DATA)
ORDER BY DATA
像这样的东西应该有用。
With HolidayCte as (
Select Year, date as 'Easter',Dateadd(dd,-46,date) as HolidayStarts
from Time_Dim
Where td.Holiday = 'Easter'
)
Select td.*
from Time_Dim td
join HolidayCte hc on hc.Year = td.year and td.Date between hc.HolidayStarts and hc.Easter
'Join between' 也成功了:
`SELECT B.DATE AS DATE
FROM TIME_DIM A
JOIN TIME_DIM B
ON B.DATE BETWEEN DATEADD(day, -46, A.DATE) AND DATEADD(day, -1,A.DATA)
WHERE A.HOLIDAY_NAME = 'Easter'
ORDER BY B.DATA`
我的国家每年都有特定的假期,持续 46 天。 我正在编写一个代码,该代码将 return 每年该假期的日期范围。
起点是 'easter' 的开始,我从中减去 46 天。
目前代码只允许我区分一年的期望期
SELECT * FROM TIME_DIM WHERE DATE BETWEEN (SELECT TOP 1 DATEADD(day, -46, DATE) as DATE FROM TIME_DIM WHERE HOLIDAY = 'EASTER' ORDER BY DATE) AND (SELECT TOP 1 DATE FROM TIME_DIM WHERE HOLIDAY = 'EASTER' ORDER BY DATE ORDER BY DATA) ORDER BY DATA
像这样的东西应该有用。
With HolidayCte as (
Select Year, date as 'Easter',Dateadd(dd,-46,date) as HolidayStarts
from Time_Dim
Where td.Holiday = 'Easter'
)
Select td.*
from Time_Dim td
join HolidayCte hc on hc.Year = td.year and td.Date between hc.HolidayStarts and hc.Easter
'Join between' 也成功了:
`SELECT B.DATE AS DATE FROM TIME_DIM A JOIN TIME_DIM B ON B.DATE BETWEEN DATEADD(day, -46, A.DATE) AND DATEADD(day, -1,A.DATA) WHERE A.HOLIDAY_NAME = 'Easter' ORDER BY B.DATA`