2017-05-10 18 views
0

1つのProcess_DTと2)Process_End_DTの2つの日付フィールドに基づいて特定の時点でアクティブなレコードを表示したいとします。私のテーブルは、レコードを更新する代わりに新しいレコードを挿入することによって、各CUST_IDの履歴を保存するという規則に従います。これが発生すると、新しいレコードにProcess_DTがnow()に設定され、Process_End_DTが31-DEC-9999に設定されます。その後、元のレコードのProcess_End_DTがnow()に設定されます。したがって、Cust_ID 1は27-FEB-2015の顧客になり、まだ有効です。 Cust_ID 3は15-APR-2014で顧客になりましたが、27-FEB-2014で終了しました。開始日と終了日を使用してアクティブな行を選択する

Cust_Id Process_DT Process_End_DT Active 
--------------------------------------------- 
1   27-FEB-2016 31-DEC-9999 1 
3   15-APR-2014 27-FEB-2017 0 

このコンベンションには、その名前が分かっていれば、名前にボーナスポイントがあります。私は与えられた時点で活発な記録を探したい。アクティブな列は表の一部ではありません。だから私のダミーデータの

ID Cust_Id Process_DT Process_End_DT Active 
----------------------------------------------- 
001 1  27-FEB-2016 31-DEC-9999 1 
002 1  01-JAN-2015 27-FEB-2016 0 
003 1  04-SEP-2014 01-JAN-2015 0 
004 2  01-MAR-2016 31-DEC-9999 1 
005 3  15-APR-2014 27-FEB-2017 0 

、31-DEC-2016上のアクティブな行が上の002と005行アクティブになり31-DEC-2015に001、004、および005行アクティブになります01-DEC-2014は003と005です。

答えて

1

は、指定された時点で活動間隔を指しているかどうかを確認するためにWHERE句を使用します。ただ、基本的な不平等を使用しています。あなたは現在の時点でアクティブな行を見たい場合は

SELECT * 
FROM MyTable 
WHERE @TimePoint BETWEEN Process_DT AND Process_End_DT; 

NOW()代わりの@TimePoint使用。

0

これは、タイプ2のディメンション表(または同様の名前)です。

select t.* 
from t 
where date '2016-12-01' >= process_dt and 
     date '2016-12-01' < process_end_dt; -- may be <= 
関連する問題