私はあなたの要件は、右理解していれば、このクエリはあなたが望むものを与える必要があります。
WITH current_running AS (
SELECT to_date('8/1/2017','mm/dd/rrrr') As Current_running_date
FROM dual
)
SELECT * FROM (
SELECT t.*,
row_number() Over (partition by id order by end_date desc) As rn,
c.Current_running_date
FROM Table1 t
JOIN current_running c
ON c.Current_running_date >= ANY(t.Start_Date, t.End_Date)
)
WHERE rn = 1
;
はデモ:http://sqlfiddle.com/#!4/33de0/10
current_running_dateのために= 2017-08-01
ことができます:
| ID | START_DATE | END_DATE | C_LEVEL | RN | CURRENT_RUNNING_DATE |
|----|-----------------------|-----------------------|---------|----|----------------------|
| 1 | 2017-01-01 00:00:00.0 | 2017-08-01 00:00:00.0 | 2 | 1 | 2017-08-01T00:00:00Z |
| 2 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 | 3 | 1 | 2017-08-01T00:00:00Z |
current_running_dateため
しばらく= 2016-07-15
| ID | START_DATE | END_DATE | C_LEVEL | RN | CURRENT_RUNNING_DATE |
|----|-----------------------|-----------------------|---------|----|----------------------|
| 1 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 | 1 | 1 | 2016-07-15T00:00:00Z |
| 2 | 2016-01-01 00:00:00.0 | 2016-12-31 00:00:00.0 | 3 | 1 | 2016-07-15T00:00:00Z |
あなたはexaclty "最新データ" とはどういう意味ですか?なぜID2にはID1に「最新のデータ」があるのですか? – krokodilko
IDは2019年まで登録されましたが、ID2はシステム内でアクティブではなくなりました。有効期限が切れている可能性があります。 –
ID 1は2011年8月1日までにc_level "2"に登録され、2011年9月1日にc_level "3"に切り替わります。クエリを実行すると "8/1/2017" 2011年9月1日にクエリを実行してください。9/1/2017を取得する必要があります。 –