2017-07-29 9 views
0

ここに私のデータです。メンバーは複数回登録でき、いつでもプランを変更することができます。最新のC_levelデータを取得する必要があります。"8/1/2017" ID 1の場合、ID 2には最新データがありません。私たちは12/31/2016レコードを表示する必要があります、このhelp.let私に質問を感謝を知って欲しい。最新のアクティブレコードを取得する方法

ID Start_Date End_Date C_Level 
1 1/1/2016 12/31/2016 1 
1 1/1/2017 8/1/2017  2 
1 9/1/2017 12/31/2017 3 
1 1/1/2018 12/31/2018 0 
2 1/1/2015 12/31/2015 2 
2 1/1/2016 12/31/2016 3 
+0

あなたはexaclty "最新データ" とはどういう意味ですか?なぜID2にはID1に「最新のデータ」があるのですか? – krokodilko

+0

IDは2019年まで登録されましたが、ID2はシステム内でアクティブではなくなりました。有効期限が切れている可能性があります。 –

+0

ID 1は2011年8月1日までにc_level "2"に登録され、2011年9月1日にc_level "3"に切り替わります。クエリを実行すると "8/1/2017" 2011年9月1日にクエリを実行してください。9/1/2017を取得する必要があります。 –

答えて

1

私はあなたの要件は、右理解していれば、このクエリはあなたが望むものを与える必要があります。

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 | 
+0

うわー、すべてのシナリオは、いつかこれに関するフィードバックを与えることを許可してください、あなたは素晴らしいです:) –

関連する問題