Как выбрать только инкрементные записи в BIG QUERY - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть данные в моей базе данных, такие как:

Existing data in the database

, и я ожидаю результат, подобный

Expected output from the existing data

Может кто-нибудь, пожалуйста, помогите мне, как написать запрос на выбор для этого.это своего рода добавочная загрузка данных

Пожалуйста, помогите мне в этом

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы можете использовать оконные функции.Вам нужна самая ранняя версия каждой записи, поэтому:

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;

Это обрабатывает зарплаты, которые уменьшаются, а также увеличиваются.

0 голосов
/ 11 декабря 2018

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
...