如何在有条件的有效日期表中获取先验值?
例如,我想获取从佛罗里达(FL)州迁出的所有员工
以下是表格数据:
| 员工id|埃夫特|状态|
| --|--|--|
| 1 |2022年1月1日|FL|
| 1 |2022年1月5日|FL|
| 1 |2023年1月1日|哦|
| 2 |2021年1月1日|NY|
| 2 |2022年1月1日|CA|
| 3 |2019年1月1日|FL|
| 3 |2023年1月1日|TX|
预期结果:
| 员工id|埃夫特|状态|
| --|--|--|
| 1 |2022年1月5日|FL|
| 1 |2023年1月1日|哦|
| 3 |2019年1月1日|FL|
| 3 |2023年1月1日|TX|
我不知道从何说起?
select *
from ps_addresses
where effdt = (
select max(effdt)
from (
select
emplid, effdt, STATE, over(order by effdt desc) as prev
from ps_addresses
) x
where prev is not null and STATE <> prev
);
1条答案
按热度按时间wgx48brx1#
我想让所有从佛罗里达州搬走的员工
如果要获取员工从佛罗里达开始工作,然后在下一行中移动到佛罗里达的这对行,则可以在Oracle 12中使用
MATCH_RECOGNIZE
:或者,您可以使用
LAG
和LEAD
分析函数:其中,对于样本数据:
两个输出:
| 员工id|公司简介|状态|
| --|--|--|
| 1 |2019 -01- 15 00:00:00| FL|
| 1 |2019 -01- 21 00:00:00|哦|
| 3 |2019-01-01 00:00:00| FL|
| 3 |2019 -01- 21 00:00:00| TX|
fiddle