У одного из моих друзей был этот вопрос для меня, и я слишком озадачен.
Его команда загружает DW, и данные продолжают поступать в режиме приращения и полной загрузки на основе adhoc basic. Теперь есть идентификатор флага, который говорит
относительно того, когда полная загрузка началась или остановилась. Теперь нам нужно собрать и отделить всю полную нагрузку.
Например:
create table #tmp (
id int identity(1,1) not null,
name varchar(30) null,
val int null
)
insert into #tmp (name, val) select 'detroit', 3
insert into #tmp (name, val) select 'california', 9
insert into #tmp (name, val) select 'houston', 1
insert into #tmp (name, val) select 'los angeles', 4
insert into #tmp (name, val) select 'newyork', 8
insert into #tmp (name, val) select 'chicago', 1
insert into #tmp (name, val) select 'seattle', 9
insert into #tmp (name, val) select 'michigan', 6
insert into #tmp (name, val) select 'atlanta', 9
insert into #tmp (name, val) select 'philly', 6
insert into #tmp (name, val) select 'brooklyn', 8
drop table #tmp
Правило:
всякий раз, когда val равен 9, начинается полная загрузка; всякий раз, когда val равен 8, полный
нагрузка останавливается; (или когда каждый следующий параметр равен 8, полная загрузка прекращается).
В этом случае для полной загрузки я должен собирать только следующие записи:
имя-идентификатор val
3 Хьюстон 1
4 Лос-Анджелес 4
10 philly 6
Мой подход до сих пор:
;with mycte as (
select id, name, val, row_number() over (order by id) as rnkst
from #tmp
where val in (8,9))
SELECT *
FROM mycte y
WHERE val = 9
AND Exists (
SELECT *
FROM mycte x
WHERE x.id =
----> this gives start 9 record but not stop record of 8
(SELECT MIN(id)
FROM mycte z
WHERE z.id > y.id)
AND val = 8)
Я не хочу углубляться в курсор при подходе курсора, но с CTE, пожалуйста, просветите!
UPDATE:
Как упомянул один из ответчиков, я восстанавливаю правила.
-> ПОЛНЫЕ ЗАГРУЗКИ начнут поступать ПОСЛЕ 9. (9-ые записи НЕ включены)
-> полная загрузка продолжается, пока не увидит немедленную 8.
-> Таким образом, все записи между 9 и 8 образуют небольшие фрагменты полной загрузки
-> Сама девятая запись не считается, так как у нее нет 8-го партнера
-> Показанный ниже набор результатов удовлетворяет этим условиям