SQL에서 복제하려고하는 SAS 프로세스가 있습니다. SAS에는 SQL Server를 SSMS를 통해 가져 왔으며 시작점 인 트랜잭션 데이터베이스가 있습니다.SAS & SQL에서 복제본 처리
데이터 집합에 611K 트랜잭션이 있습니다.
과정은 매우 간단하고 간단합니다. 중복을 제거하고 데이터를 집계하십시오.
그러나 최종 결과는 두 프로세스간에 조정되지 않으며 이에 대해 내 머리를 치고 있습니다.
내가 좁혔던 하나의 특정 영역은 아마 중복의 처리입니다.
내가 가장 오래된 날짜 만 트랜잭션을 유지하고 다른 모든 속는을 제거하기 위해 SQL로하고 있습니다 수행 방법은 다음과 같습니다
select x2.*
into #dupes
--delete x2
from #xl_Trans x2
inner join (
select x1.id as id,min(x1.closedat) as min_closedat
from #xl_Trans x1
inner join
(
select id,count(*) as CountOf
from #xl_Trans
group by id
having count(*) > 1
)x ON x1.id= x.id
group by x1.id
) x3 ON x2.id = x3.id and x2.closedat <> x3.min_closedat
corresponding code in SAS is:delete duplicates, keep the first occurrence
proc sort data=temp1;by id;run;
data temp1;
set temp1;
by id;
if first.id;
run;
SQL process removed 1700 dupes whereas SAS identified about 2200+ dupes.
나는 데이터 집합을하지 않고 제안 할 하드를 알지만, 불일치를 설명하는 SQL에서 누락 된 부분이 있는지 SAS 스 니펫에 알고 싶을뿐입니다.
id 또는 closedat 값이 누락 되었습니까? – jms
@jms 응답에 감사드립니다. 그걸 확인했지만이 열에 대해 누락 된 값이없는 것 같습니다. – Bee
같은 날짜에 중복 된 것이 있으면 궁금 할 것입니다. 이것은 대처하기 힘든 상황입니다. SAS는 SQL이 제공하지 않는 행 순서 개념을 가지고 있으므로 SQL은 사용자가 무엇을 결정하는지 알지 못하는 경우에도 정리가 매우 행복하기 때문에 주문에 대한 근거가되며 SQL은 그다지 좋아하지 않습니다. – Joe