答案 0 :(得分:0)
你可以尝试这样的事情。未经测试,因为您没有以可用格式提供测试数据。如果员工多次更改位置,则会显示所有更改。 (您可能希望按emp_id
和eff_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
分区并按时间顺序排序);那么输出可以用来简单地过滤前一个位置不等于当前位置的行。