정확히 일치하고 다른 테이블로 테이블을 업데이트하기위한 가장 가까운 일치큰 데이터 테이블 (1M 행)이 있습니다. 하나의 열은 serialNumber이고, 하나의 열은 dateTime이고, 하나의 열은 elapsedTime입니다. 훨씬 더 작은 또 다른 테이블에도이 열이 있지만 dateTime은 작은 양 (5 ~ 20 분)으로 더 빠르며 elapsedTime은 훨씬 더 정확한 값입니다. 작은 테이블에는 다른 dateTimes에있는 다른 이벤트와 연관된 추가 행이 많이 있습니다 (나는 '이벤트'열이 없습니다). serialNumbers를 일치시키고 큰 테이블의 dateTime보다 작거나 같은 가장 큰 dateTime을 선택하여 정확한 elapsedTimes로 큰 테이블을 업데이트하려고합니다.
이 스크립트는 매일 매일 실행되는 더 큰 스크립트의 일부로, 각 serialNumber를 매일 업데이트합니다.
지금 당장 가장 좋은 해결책은 정확성에 대한 타협을하고 하루 종일 평균 elapsedTime을 선택하고 dateTime 열에 정확히 일치하는 것을 사용하는 것입니다. 작은 테이블에 특정 날짜에 여러 번 여러 이벤트가 포함되어있을 때 부정확성이 생길 수 있지만 "12 시간 이내"는 현재 큰 테이블보다 훨씬 정확합니다.
중첩 된 foreachrows 루프를 사용하는 또 다른 솔루션이 있지만 매우 느립니다.
아이디어가 있다면 제안하고 코드 작성에 대해 걱정하지 마십시오.
감사,
홍옥
재 : 정확히 일치 및 다른 테이블로 테이블을 업데이트하기위한 가장 가까운 일치그것은 내가 과거에 사용한 방법이며, 더 빨리 달릴 것입니다. 그러나 인터리브 된 레코드가 없거나 앞에 오는 레코드가없는 레코드를 찾으십시오.
재 : 정확히 일치 및 다른 테이블로 테이블을 업데이트하기위한 가장 가까운 일치텍사스, 나는 당신의 속도와 이해력에 놀란다. 귀하의 대답은 미묘하게 각 SN 루프에 대해 느리게 언급하지 않습니다.
내 게시물을 마무리하면서이 아이디어의 시작을 알게되었습니다.
작은 테이블의 날짜 창만 선택하여 큰 테이블을 서브 세트하십시오.
elapsedTime 열을 제외하고 작은 테이블에 부분 집합 테이블을 연결합니다.
연결된 테이블을 SN 및 dateTime으로 정렬
누락 된 elapsedTimes를 이전 행으로 채 웁니다.
큰 테이블을 연결된 테이블로 업데이트하십시오.
재 : 정확히 일치 및 다른 테이블로 테이블을 업데이트하기위한 가장 가까운 일치나는 당신이 뭔가를 사용할 것을 제안 할 것이다;
theRows = dt2 << select rows where( dt2:serialNumber == dt21:serialNumber[i] &
dt2:dateTime <= dt1:dateTime );
if( N Rows( theRows ) > 0, targetRow = theRows[N Rows( theRows )] );