2017-05-10 142 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 <= 
相关问题