2016-11-25 5 views
0

T-SQLを使用していて、「最も単純な」クエリを使用していくつかの値を検索したいと考えています。これにより、可能な場合は、1つの文/ where節でこのロジックを実行できるようにすることを意味します。90日間のウィンドウ+/- 14日間反復と一致するレコードの検索方法

ユーザは基準日(2016年11月25日と言いましょう)、90日(+/14日)ごとに「タイムウィンドウ」が開き、データにアクセスできるようになります。この場合、2017年2月9日から2017年9月9日の間になるでしょう。これは進行中の取り決めであり、結果的に2017年2月23日から90日(+ 14日)後に同じことが再び起こります。

ユーザが基準日を知るだけでこれらのウィンドウのいずれかにいるかどうかを計算できる必要があります。

私は最初にDATEDIFF(DAY, baseline_date, GETDATE()) % 90 = 0を使用することを考えていましたが、+/- 14日間は考慮できません。

アイデア?

+0

あなたは私たちにいくつかのテーブル構造を表示することができます。サンプルデータと期待される出力? [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を向上させ、より良い回答を得る方法を学ぼう。 –

答えて

2

(ゼロより前の)-14 - 0とゼロの後の0 - 14日が必要です。
は、0から89(マイナス記号なし)の値を示します。しかし、それは90で循環しリセットするので、-14 - 076 - 89と同じです。

だから、日0 - 1476 - 89をしたい:

where datediff(day, baseline_date, GETDATE()) % 90 not between 15 and 75 
+0

これは素晴らしいことですが、期待したとおりに動作させるためには別の節が必要であることに気付くのはおそらく便利です: 'and datediff(day、baseline_date、GETDATE())> = 90' – MultiJ

関連する問題