如何仅选择大查询中的增量记录

时间:2018-12-11 17:59:55

标签: sql google-bigquery bigdata

我的数据库中有如下数据

Existing data in the database

我期望的结果是

Expected output from the existing data

任何人都可以帮助我如何为此编写选择查询。这是一种增量数据加载

请帮助我

2 个答案:

答案 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