안녕하세요, Kennedy3님,
이 작업을 수동으로 수행하는 방법을 찾고 있다면 다음 접근 방식(쉽게 스크립트로 작성할 수 있음)이 적합할 것입니다. 아래 수식은 새 "변경 수준"이 있는 타임스탬프에 부딪힐 때까지 "수준 변경" 값을 새 수식 열 아래로 복사합니다.
가정: 테이블 1과 테이블 2의 날짜에 대한 열 이름은 동일합니다.
아래 단계에서 표 1에는 "Change Level"이라는 열이 있습니다.
1단계: 테이블 => 연결을 사용하여 한 테이블을 다른 테이블에 추가
2단계: 테이블 사용 => 날짜별로 새 테이블을 정렬하려면 정렬을 사용하세요.
3단계: 다음 수식을 사용하여 결과 테이블에 수식 열을 만듭니다.
(위 수식에서는 새 수식 열을 '열 3'이라고 합니다.)
결과 테이블에서 표 1의 정보를 유지하지 않으려는 경우(즉, "조회" 테이블인 경우) "수준 변경" 열에서 누락되지 않은 행을 모두 선택하고 삭제할 수 있습니다.
도움이 되었기를 바랍니다…
나는 집에서 다양한 센서를 모니터링할 때 비슷한 문제를 다루었습니다. 집 전체에 온도, 습도, 조도를 측정하는 센서가 5개 있습니다. 값이 이전 값에서 변경되지 않은 한 8분마다 중앙 허브(SmartThings)로 측정값을 보냅니다. 나는 또한 집안의 전력 사용량을 측정하는 지속적인 전력 측정기를 가지고 있습니다.
제가 이 문제를 처리한 방법은 1년 동안 5분마다 샘플이 포함된 "5분의 1년" JMP 데이터 테이블을 구축하는 것입니다. 그런 다음 스크립트를 사용하여 20개 센서의 값을 올해 5분 테이블에 인터리브합니다. 따라서 센서에 대한 특정 샘플에서 판독값이 있으면 기록됩니다. 그렇지 않은 경우 누락된 값이 있습니다.
5분의 해:

"센서 상태"를 시각화할 수 있는 또 다른 스크립트가 있습니다. 기본적으로 "IsMissing" 검사입니다. 이를 통해 네트워크 문제, 센서 문제 등이 있을 때 이를 알 수 있습니다. 매우 도움이 되었습니다. 또한 내 조인이 작동하는지 시각화해 보세요.

따라서 기본적으로 전략은 측정에서 가질 수 있는 가장 짧은 시간 간격(분마다)으로 마스터 샘플링 테이블을 사용하고 각 센서를 해당 마스터 테이블에 연결하는 것이었습니다.
나는 이것을 '결합'이라기보다는 '인터리빙'이라고 생각하며, 분명 바람직할 수 있는 결과가 하나 이상 있을 것입니다.
나는 당신이 원하는 것에 가깝다고 생각하는 오래된 코드를 파헤쳤습니다. 또한 JSL의 세계 내에서도 원하는 곳으로 이동하는 좋은 방법과 덜 좋은 방법이 있을 것입니다. 따라서 Eric의 접근 방식에 대한 대안으로 아래를 참조하세요. 나는 그것이 더 효율적으로 만들어질 수 있다고 확신하며, 그것은 다른 사람들이 한 번 시도해 보고 싶어할 수도 있습니다. . .
이름DefaultTo여기 ( 1 ) ;
// 두 테이블에 '날짜' 데이터를 만듭니다.
nf = 100 ;
발스 = 제이 ( nf , 1 , 무작위정수 ( 날짜DMY ( 1 , 1 , 2014년 ) , 날짜DMY ( 31 , 12 , 2014년 ))) ;
dtFine = 새 테이블 ( "2014년 날짜 및 시간 - 양호" ,
새열 ( "날짜" , 숫자 , 마디 없는 ,
체재 ( "ddMonyyyy h:m:s" , 22 , 0 ) ,
입력 형식 ( "ddMonyyyy h:m:s" , 0 ) ,
가치 ( 발스 )
)
) ;
체크 안함 = 10 ;
발스 = 제이 ( 체크 안함 , 1 , 무작위정수 ( 날짜DMY ( 1 , 1 , 2014년 ) , 날짜DMY ( 31 , 12 , 2014년 ))) ;
dt거친 = 새 테이블 ( "2014년 날짜 및 시간 - 대략적" ,
새열 ( "날짜" , 숫자 , 마디 없는 ,
체재 ( "ddMonyyyy h:m:s" , 22 , 0 ) ,
입력 형식 ( "ddMonyyyy h:m:s" , 0 ) ,
가치 ( 발스 )
) ,
새열 ( "온도" , 숫자 , 마디 없는 , 공식 ( 랜덤보통 ( 18 , 2 )))
) ;
dtFine << 종류 ( 에 의해 ( : 날짜 ) , 주문하다 ( 오름차순 ) , 테이블 바꾸기 ) ;
dt거친 << 종류 ( 에 의해 ( : 날짜 ) , 주문하다 ( 오름차순 ) , 테이블 바꾸기 ) ;
//************************************************ ************************************************** ****
// 거친 데이터를 미세한 데이터와 인터리브합니다.
//************************************************ ************************************************** ****
// dtCoarse의 열을 dtFine에 추가합니다.
기다리다 ( 삼 ) ;
N = NCol ( dtFine ) ;
열 = dt거친 << getColumnNames ( "끈" ) ;
을 위한 ( 씨 = 1 , 씨 <= N항목 ( 열 ) , 씨 ++,
dtype = 열 ( dt거친 , 열 [ 씨 ]) << getDataType ;
mtype = 열 ( dt거친 , 열 [ 씨 ]) << getModelingType ;
addCol = 만료 ( dtFine << 새열 ( 열 [ 씨 ] , dtype , mtype , 형식미정 )) ;
대체하다 ( addCol , 만료 ( 형식미정 ) , 열 ( dt거친 , 열 [ 씨 ]) << getFormat ) ;
addCol ;
) ;
//************************************************ ************************************************** ****
// 논리는 오름차순으로 정렬되는 두 테이블에 의존합니다!
//************************************************ ************************************************** ****
파인DT = 열 ( dtFine , "날짜" ) << getValues ;
거친DT = 열 ( dt거친 , "날짜" ) << getValues ;
만약에 (
// dtCoarse의 시간은 dtFine의 가장 빠른 시간보다 늦지 않으므로 후자의 첫 번째 행에 값을 삽입합니다.
맥스 ( 거친DT ) < 최소 ( 파인DT ) ,
을 위한 ( 씨 = 1 , 씨 <= N항목 ( 열 ) , 씨 ++,
열 ( dtFine , N + 씨 )[ 1 ] = 열 ( dt거친 , 열 [ 씨 ])[ Nrow ( dt거친 )] ;
) ,
// 또 다른 . . .
// pos에는 dtCoarse의 값이 삽입되어야 하는 dtFine의 행 위치가 포함됩니다.
// (참고: pos의 값이 NRow(dtFine)보다 크면 후자에 행이 추가되지 않으며 오류가 발생하지 않습니다.)
포스 = 위치 정렬됨 ( 파인DT , 거친DT ) ;
포스 = 포스 + 제이 ( Nrow ( 포스 ) , 1 , 1 ) ;
// 셀에 값을 삽입합니다.
을 위한 ( 피 = 1 , 피 <= Nrow ( 포스 ) , 피 ++,
을 위한 ( 씨 = 1 , 씨 <= N항목 ( 열 ) , 씨 ++,
열 ( dtFine , N + 씨 )[ 포스 [ 피 ]] = 열 ( dt거친 , 열 [ 씨 ])[ 피 ] ;
) ;
) ;
) ;
안녕, 케네디3,
이는 고정된 간격으로 변화하지 않더라도 레벨을 기록하는 것이 아니라 레벨의 변화만 기록하는 센서 때문에 흔히 발생하는 문제인 것 같아서 조금 생각해 보기로 했습니다.이 작업을 수행하는 방법을 제가 아는 유일한 방법은 대형 테이블에 대해 엄청나게 비효율적일 수 있는 복합 쿼리를 사용하는 것입니다. 또는 더 효율적일 수 있는 변형을 생각해 낼 수도 있습니다.
예를 들면 다음과 같습니다. 제가 컨트리 클럽을 운영하고 있다고 가정하고 골퍼 수와 기온 간의 관계를 살펴보겠습니다.제가 가지고 있는 기온 데이터는 주간 평균 기온 표뿐입니다.

골퍼 수에 대해서는 무작위로 저를 위해 일하는 여름방학 학생이 있는데, 그녀에게 골퍼 수를 세도록 했습니다.그녀의 데이터는 다음과 같습니다.

그녀가 골퍼 수를 세는 날짜는 평균 고온 측정 날짜와 일치하지 않습니다.그녀가 골퍼 수를 세는 각 날짜에 대해 내가 하고 싶은 것은 그 주의 시작 부분의 온도 판독값을 찾는 것입니다.다음 SQL을 사용하여 "Week <= TestDate" 조건으로 두 테이블을 조인하는 경우:
SELECT t2.TestDate, t1.Week
FROM dbo.Golfers t2
LEFT OUTER JOIN dbo.AvgHighTemps t1
ON ( t1.Week <= t2.TestDate )
ORDER BY t2.TestDate ASC;
나는 다음과 같은 테이블을 얻을 것입니다 :

이제 각 TestDate에는 일치하는 주가 여러 개 있습니다.하지만 TestDate보다 작은 주 날짜가 가장 큰 행을 꺼내면 그 주가 내가 원하는 주가 됩니다.다음 SQL로 그렇게 할 수 있습니다.
SELECT t2.TestDate, MAX(t1.Week) AS Week
FROM dbo.AvgHighTemps t1
FULL OUTER JOIN dbo.Golfers t2
ON ( t2.TestDate >= t1.Week )
GROUP BY t2.TestDate
ORDER BY t2.TestDate ASC;
결과 테이블은 다음과 같습니다.

이제 까다로운 부분이 나옵니다.원하는 결과를 얻으려면 해당 쿼리를 하위 쿼리로 사용하여 다른 두 테이블을 결합해야 합니다.SQL은 다음과 같습니다.
SELECT t1.Week, t1.AvgHighTemp, t2.TestDate, t2.NGolfers
FROM (
SELECT t1.TestDate, MAX(t2.Week) as TempWeek
FROM dbo.Golfers t1
LEFT OUTER JOIN dbo.AvgHighTemps t2
ON ( t2.Week <= t1.TestDate )
GROUP BY t1.TestDate
) tempFinder
RIGHT OUTER JOIN dbo.AvgHighTemps t1
ON t1.Week = tempFinder.TempWeek
RIGHT OUTER JOIN dbo.Golfers t2
ON t2.TestDate = tempFinder.TestDate
;
결과는 해당 주의 골퍼 수와 평균 기온이 포함된 테이블입니다.

거기까지 가는 데 약간의 노력이 필요하지만 개인적으로 다른 방법이 있는지 모르겠습니다.
도움이 되었기를 바랍니다,
에릭