清理就业状态日期之间的行

时间:2018-08-02 13:36:48

标签: sql oracle

我有一个包含多个日期和状态代码的文件:

(示例):

STAT_DT     STAT_CD  EMPLOYEE_ID
1/1/2017    A        1234
2/4/2017    A        1234
4/9/2017    A        1234
5/12/2017   A        1234
6/1/2017    T        1234
7/4/2017    T        1234
8/1/2017    A        1234
9/28/2017   A        1234
2/1/2017    A        7897
3/4/2017    A        7897
4/9/2017    A        7897
6/12/2017   A        7897
7/1/2017    T        7897
9/4/2017    T        7897
10/1/2017   A        7897
11/28/2017  A        7897

为了使此垃圾文件可用,我需要能够在每次状态更改之间保留MIN状态日期。
(在这种情况下,要保留的最小日期为: 1/1/2017 A,6/1/2017 T和8/1/2017 A EE 1234)
并删除其余所有内容。

到目前为止,我对如何实现此目标尚无定论,但是当我成功朝正确方向迈出一步时,我将进行更新。我只能说是感谢上帝的测试环境。...

2 个答案:

答案 0 :(得分:3)

使用lag()

select t.*
from (select t.*, lag(stat_cd) over (partition by employee_id order by stat_dt) as prev_sc
      from t
     ) t
where prev_sc is null or prev_sc <> stat_cd;

答案 1 :(得分:0)

我将以下选择的值插入新表中

select min(stat_dt), stat_cd, employee_id
from table_name
group by employee_id, stat_cd;

我刚刚注意到您的测试数据可以恢复到以前的状态。这意味着您需要添加自我连接以查找其他状态代码