2017-05-10 197 views
0

我希望看到基於兩個日期字段在某個時間點處於活動狀態的記錄:1)Process_DT和2)Process_End_DT。我的表遵循一個通過插入新記錄而不是更新記錄來保存每個CUST_ID的歷史記錄的約定。發生這種情況時,新記錄將Process_DT設置爲now(),並將Process_End_DT設置爲31-DEC-9999。然後將原始記錄的Process_End_DT設置爲now()。因此,在一些情況下,Cust_ID 1在2015年2月27日成爲了客戶,他們仍然活躍。 Cust_ID 3於2014年4月15日成爲客戶,但於2014年2月27日結束。使用開始日期和結束日期選擇活動行

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活性的行會是001,004,和005的行活躍在31-DEC-2015將是002和005的行活躍31-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 <= 
相關問題