表结构:(数据库为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
在上面的例子中,
ABC
是15-01-2015
上的客户状态,因为这是10-01-2015
上设置的,直到27-02-2015
才更改。
PQR
是28-02-2015
上的客户状态,因为这是27-02-2015
上的设置,直到04-08-2015
才更改。
答案 0 :(得分:2)
您可以使用潜在分析功能来获取间隔结束。然后只需在之间进行搜索。
{{1}}
答案 1 :(得分:1)
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;