如何查找员工的位置何时发生变化以及输出以前和当前位置?

时间:2018-02-28 01:52:25

标签: sql oracle

The below describes the 'before' state of the rows and columns. Here, User A had his location changed from Loc_1 to Loc_2 on effective date 27-FEB-18 03.04.04.764000000 PM. This shows the desired result.

从原始记录集中,我如何为员工提供以前的位置,新位置以及此更改生效的时间。谢谢!

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情。未经测试,因为您没有以可用格式提供测试数据。如果员工多次更改位置,则会显示所有更改。 (您可能希望按emp_ideff_from_date订购以使输出更易于阅读/使用;我没有这样做。)我忽略了emp_status列,因为您没有& #39;什么都不说;如果必须使用它,它可能会进入 sub 查询中的where子句。我还将列名更改为有效名称。

select emp_id, emp_name, prev_emp_location, new_emp_location, eff_from_date
from   (
         select emp_id, emp_name, emp_location as new_emp_location, eff_from_date,
                lag(emp_location) over (partition by emp_id order by eff_from_date)
                    as prev_emp_location
         from   your_table
       )
where  new_emp_location != prev_emp_location
;

子查询使用lag()分析函数记录先前的位置(按emp_id分区并按时间顺序排序);那么输出可以用来简单地过滤前一个位置不等于当前位置的行。