내 친구 중 한 명이이 Q를 나에게 가지고 있고 너무 혼란 스럽습니다.식별자를 기반으로 두 간격 사이에 데이터 분리
그의 팀이 DW를로드 중이고 데이터가 adhoc 기본에서 증분 및 전체로드 방식으로 계속 유지됩니다. 이제 전체로드가 시작되거나 중지되었을 때를 나타내는 이라는 식별자 플래그가 있습니다. 이제 전체 부하를 모으고 분리해야합니다.
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
규칙은 다음과 같습니다 : 예를 들어
발 9, 전 부하 시작 때마다; val이 8 일 때마다 로드가 중지됩니다. (또는 다음 val이 8 일 때마다 최대 부하가 멈 춥니 다).
이때전체 부하, I 만이 기록을 수집해야
ID 이름 브로
3 휴스턴 1 개
4 개 로스 앤젤레스 4
10 필라델피아 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 형태 사이의 모든 기록 전체 부하의 작은 덩어리
-> 자체가 가지고로 간주되지 않습니다 개인 9 기록 파트너로서 더 팔 없습니다
- 아래 결과 집합은 이러한 조건을 만족>
을 미시간도 수집해야합니까? 그리고 애틀란타는 더블 스타트 이후 어떻게 처리되어야할까요? –
3 개의 시작점과 2 개의 끝점이 있습니다. 어떻게 처리할까요? – JNK
@justin ... 이제 규칙은 우리가 8을 가지고 9를 만들어 시작/멈춤 쌍을 형성해야한다는 것입니다. 이제 atlanta (9) 기록에는 즉각적인 동반 파트너 즉 6이 포함되지 않았으므로 포함 시키면 안됩니다. 더 많은 꼬마 도깨비. 여기서 필요한 것은 9 개의 레코드를 포함하거나 포함하지 않고 이러한 모든 쌍 9-8의 레코드를 캡처하는 것입니다.이 레코드는 필요한 경우 쉽게 val = 9 인 필터 절에만 포함될 수 있습니다. – Ram