2016-04-04 21 views
1

2週間の期間が2つの開始日で1週間離れて定義されています。たとえば、グループ1は2016-01-15で開始し、グループ2は2016-01-22で開始しました。アンカーの日付に基づいて特定の2週間を決定する

2週間に1回、2週間持続するローリング期間を意味します。

現在の日付がグループ1の第1週にあるのか、またはグループ2の第1週にあるのかを確認するにはどうすればよいですか?

例として、今日の日付は2016-04-04です。したがって、これはグループ2の1日目とグループ1の8日目になるため、 'グループ2'を返すクエリを希望します。

+0

ご質問を詳しくご記入ください。現在の日付は4月で、隔週の私の定義ではどちらの期間も1月または2月に終了していません。 –

答えて

0

DATEDIFFは、2つの日付の差を計算します。 14日で割って残りの部分を取る(%)。

残量が7未満の場合は、開始日に近い。

開始日が1週間離れていることが分かっているので、開始日を1つだけ確認する必要があります。

DECLARE @VarStartGroup1 date = '2016-01-15'; 
DECLARE @VarStartGroup2 date = '2016-01-22'; 
DECLARE @VarCurrentDate date = '2016-04-04'; 

SELECT 
    DATEDIFF(day, @VarStartGroup1, @VarCurrentDate) AS TotalDays1, 
    DATEDIFF(day, @VarStartGroup2, @VarCurrentDate) AS TotalDays2, 
    DATEDIFF(day, @VarStartGroup1, @VarCurrentDate) % 14 AS DayNumberInGroup1, 
    DATEDIFF(day, @VarStartGroup2, @VarCurrentDate) % 14 AS DayNumberInGroup2, 
    CASE WHEN DATEDIFF(day, @VarStartGroup1, @VarCurrentDate) % 14 < 7 
    THEN 'Group1' ELSE 'Group2' END AS Result 
; 

結果

+------------+------------+-------------------+-------------------+--------+ 
| TotalDays1 | TotalDays2 | DayNumberInGroup1 | DayNumberInGroup2 | Result | 
+------------+------------+-------------------+-------------------+--------+ 
|   80 |   73 |    10 |     3 | Group2 | 
+------------+------------+-------------------+-------------------+--------+ 

私は何が起こっているかを理解するために、結果で中間計算が含まれています。

+0

ブリリアント。ありがとうございました。 – Goolsy

関連する問題