3

そのような休日が繰り返される場合(つまり、新年)、日付と繰り返しを示す休日のきちんとしたテーブルがあります

ここに画像の説明を入力

ここで、2 つの日付の間の休日の数を数える必要があります。繰り返しに関する情報を含まない単純な日付のリスト (つまり、2000 年 1 月 1 日から 2015 年 1 月 1 日までのすべての新年が表示される) の場合は、非常に簡単です。つまり、次のようなものです。

declare @start_Date Date= '2013-01-02',
@end_date Date ='2014-01-02'



SELECT  COUNT(CE.name) AS holidays_count
FROM dbo.argo_cal_event AS CE INNER JOIN  dbo.argo_cal_event_type AS CET 
ON CE.event_type_gkey = CET.gkey
WHERE (CET.name = 'EXEMPT_DAY') AND (CE.name <> 'Sundays')
AND (CE.occ_start BETWEEN @start_Date AND @end_date) 

しかし、今ではきちんとした再発があるので、上記のクエリは、「毎年始まる」と宣言されているすべての新年、クリスマスなどをカウントしません。

そのようなリストでテーブルを作成できますが、他の方法はあるのでしょうか?

編集:私が念頭に置いていたことを正確に説明しましょう:イベントが1回発生した場合、イベントを通常どおりカウントしたいと思います(ここでは、ユーザーはすべての不規則な休日をイースターとして入力する必要があると想定します)が、繰り返し < > 一度、オカレンスの開始を取得し、その日付から最終日までの年数を数えます。

EDIT2:私はそれを手に入れたと思います-私が使用できる繰り返しの休日のために

SELECT sum (datediff (year, ce.occ_start, @end_date)) as recurrent_holidays
FROM dbo.argo_cal_event AS CE INNER JOIN  dbo.argo_cal_event_type AS CET 
ON CE.event_type_gkey = CET.gkey
 WHERE (CET.name = 'EXEMPT_DAY') and (CE.repeat_interval ='ANNUALLY')

EDIT3:残念ながら、別のテーブルから取得された2つの日付の間でカウントしたい場合、つまりユニット間の定期的な休日をカウントしたい場合、このソリューションは機能しません(または少なくともかなり複雑になります)。 time_in と getddate() :/

4

3 に答える 3