获取特定日期的状态

时间:2015-09-10 05:18:59

标签: sql oracle oracle12c

表结构:(数据库为oracle 12c

CUSTOMER_ID | STATUS | STATUS_FROM_DATE
        101 | ABC    | 10-01-2015
        101 | PQR    | 27-02-2015
        101 | LMN    | 04-08-2015
        101 | ABC    | 08-09-2015

问题:如何从上表中获取特定日期的status客户?

例如:

CUSTOMER_ID | Input Date | Expected Output
        101 | 15-01-2015 | ABC
        101 | 27-02-2015 | PQR
        101 | 28-02-2015 | PQR
        101 | 10-09-2015 | ABC

在上面的例子中,
ABC15-01-2015上的客户状态,因为这是10-01-2015上设置的,直到27-02-2015才更改。
PQR28-02-2015上的客户状态,因为这是27-02-2015上的设置,直到04-08-2015才更改。

2 个答案:

答案 0 :(得分:2)

您可以使用潜在分析功能来获取间隔结束。然后只需在之间进行搜索。

{{1}}

答案 1 :(得分:1)

SQL FIDDLE DEMO

 with ranges as (
     select t.*, 
     lead(STATUS_FROM_DATE,1, (select sysdate from dual)) 
       over (partition by CUSTOMER_ID order by STATUS_FROM_DATE) as status_change
     from Table1 t
 )
 select r.status, s."Date", s."Expected Output"
 from ranges r
 inner join TestStatus s
    on s."Date" < r.status_change
  and  s."Date" >= r.STATUS_FROM_DATE;