Я хочу иметь возможность обнаруживать все записи (некоторые дублированные) и отмечать те, которые перекрываются (записи, загруженные после) другими, как OVER
.Для этого у меня есть SELECT, чтобы вернуть существующие перекрывающиеся записи, и CTE, чтобы установить для этого столбца значение OVER
.
Моя проблема заключается в том, чтобы адаптировать запрос выбора, чтобы пометить самое новое с этим значением и сохранить его внутри cte какЯ не знаком с SQL.
Выбор:
select t.*
from testtable t where exists
(select 1 from testtable t2
where t.idd = t2.idd
AND t.id<>t2.id
AND t2.beg <= t.end
AND t.beg <= t2.end)
Половина сделанного CTE:
;with cte
as (select t.*, Row_number() over (partition by idd order by date_uploaded desc) RN
from testtable as t)
update cte set overlapped = 'OVER'
where RN > 1
and (overlapped is null or overlapped <> 'UNIQUE')
Пример данных, как это должно выглядеть:
overlapped ID idd iduser iddate name beg end date_uploaded
UNIQUE 52 -1907372231 666 201802 sol 2018-09-01 2018-09-10 2018-09-12
OVER 53 -1907372231 666 201802 sol 2018-09-10 2018-09-12 2018-09-13
Обратите внимание, как строка 53 перекрывает дату BEG с END
Любая помощь с моей проблемой, она очень ценится.