我的数据库中有如下数据
我期望的结果是
任何人都可以帮助我如何为此编写选择查询。这是一种增量数据加载
请帮助我
答案 0 :(得分:1)
您可以使用窗口功能。您想要每个记录的最早版本,所以:
select t.*
from (select t.*,
row_number() over (partition by empid, empname, sal order by create_time) as seqnum
from t
) t
where seqnum = 1;
如果要检测更改,而不是第一次出现一组值,则可以使用lag()
:
select t.*
from (select t.*,
lag(sal) over (partition by empid, empname order by create_time) as prev_sal
from t
) t
where prev_sal is null or prev_sal <> sal;
这可以处理增加和减少的工资。
答案 1 :(得分:0)
SQL SERVER还是ORACLE?
在这里我尝试使用SQL SERVER 对于所有记录,请获取该员工的最近的先前记录(如果有),然后检查是否有更改,如果没有,则不要选择-因此,仅显示新记录或更改的记录
SELECT t1.* FROM tab t1
OUTER APPLY
(SELECT TOP 1 t2.*
FROM tab t2
WHERE t1.empid = t2.empid
AND t2.create_time < t1.create_time
ORDER BY t2.create_time DESC
) IQ
WHERE IQ.empid IS NULL
OR IQ.ename != t1.ename
OR IQ.sal != t1.sal