日付テーブルから3日(具体的には営業日)を引いた日付を取得する必要があります。以下は構造です:
日付営業日 1/1/13 Y 1/2/13 N 1/3/13 Y 1/4/13 Y 1/5/13 Y
todays
日付がその場合、 (営業日)日1/5/13
を取得する必要があるとします( 1/2/13は営業日ではないため)current_date - 3
1/1/13
これは、「ウィンドウ処理」関数として知られているものを使用して実行できます。以下は、DB2のすべての(最近の)バージョンで機能するはずです(ただし、インスタンスから離れているため、テストされていません)。
SELECT calendar_date
FROM (SELECT calendar_date, ROW_NUMBER() OVER(ORDER BY calendar_date DESC) as rownum
FROM Calendar
WHERE calendar_date < CURRENT_DATE
AND business_day = 'Y') c
WHERE ROW_NUM = 3
結果として2013-01-01
。
同様の計算をたくさん行う場合は、実際には、この種のストアドプロシージャを作成することをお勧めします。たとえば、のようになりaddBusinessDays(calendar_date, days_to_add)
ます。テーブルを機能させるにはテーブルにアクセスする必要がありますが、それをマークできるはずですDETERMINISTIC
(コンパイラーでそれを回避でき、その日が突然切り替わらないと仮定すると...)
MSSQLの場合は、次を使用できます。
GETDATE() - 3
MYSQLの場合は、http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.htmlで日付関数を確認できます。
CURDATE()
私はMYSQLでうまくいくと信じています。
SQLだけを使用してこの問題の解決策を見つけることができるかどうかは疑問です。必要なのは、これをプログラムで解決するためのヘルプです(ストアドプロシージャなどを使用)。