Sql 如何确定员工何时和向何处工作';s位置已更改,是否同时输出上一个和当前位置?

Sql 如何确定员工何时和向何处工作';s位置已更改,是否同时输出上一个和当前位置?,sql,oracle,Sql,Oracle,根据原始记录集,我如何将员工带到以前的位置、新位置以及此更改何时生效。谢谢 你可以试试这样的东西。未测试,因为您没有以可用格式提供测试数据。如果员工多次更改位置,将显示所有更改。(您可能希望通过emp\u id和eff\u from\u date订购,以使输出更易于阅读/使用;我没有这样做。)我忽略了emp\u status列,因为您没有对其进行任何说明;如果必须使用它,它可能会出现在子查询中的where子句中。我还将您的列名更改为有效列名 select emp_id, emp_name, pr


根据原始记录集,我如何将员工带到以前的位置、新位置以及此更改何时生效。谢谢

你可以试试这样的东西。未测试,因为您没有以可用格式提供测试数据。如果员工多次更改位置,将显示所有更改。(您可能希望通过
emp\u id
eff\u from\u date
订购,以使输出更易于阅读/使用;我没有这样做。)我忽略了
emp\u status
列,因为您没有对其进行任何说明;如果必须使用它,它可能会出现在子查询中的
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();然后,可以使用输出来简单地筛选前一个位置与当前位置不相等的行。

如果员工有,比如说,2或3个前一个位置,会发生什么?@Lowerer-如果您阅读文章,您将很快了解第一个表是示例输入,而第二个表是这些输入的所需输出。