타임스탬프를 기반으로 테이블 업데이트안녕,
나는 두 개의 테이블이 있습니다. (A와 
테이블 A에는 기간의 시작을 표시하는 이벤트(테스트 기간에 따른 2000개의 이벤트)와 특정 타임스탬프의 기간 이름이 포함되어 있습니다(밑줄 친 라인은 헤더).
타임스탬프, 기간
30-12-2021 17:35:49.1, A
30-12-2021 17:39:36.8, 나
...
따라서 기간 A는 "30-12-2021 17:35:49.1"과 "30-12-2021 17:39:36.8" 사이입니다.
표 B는 약 6000000개 데이터 포인트의 타임스탬프(밑줄 친 라인은 헤더임)와 함께 데이터를 기록하는 로그 파일입니다.
타임스탬프, sensor1, sensor2, sensor3 ,...
30-12-2021 17:37:21.2, 값, 값, 값,...
30-12-2021 17:37:22.2, 값, 값, 값,...
30-12-2021 17:37:23.2, 값, 값, 값,...
B의 타임스탬프 값을 기반으로 하는 테이블 A의 기간 값을 사용하여 테이블 B에 now 열을 추가하고 싶습니다.
B의 타임스탬프가 테이블 A의 행(N)에 있는 타임스탬프보다 크거나 같고 테이블 A의 행(N+1)에 있는 타임스탬프보다 작으면 행(N)의 기간 값이 테이블의 해당 레코드에 할당됩니다. B(B의 타임스탬프는 A의 두 타임스탬프 사이에 있음)
어떤 제안?
감사 해요
창Re: 타임스탬프를 기반으로 테이블 업데이트룩업 테이블을 정렬하여 사용 정렬된 위치() . 작동 방식을 보려면 스크립팅 인덱스에서 함수를 확인하십시오.
Re: 타임스탬프를 기반으로 테이블 업데이트다음을 사용하여 가능한 솔루션입니다. @ErraticAttach 사용 방법에 대한 제안.
Names Default To Here( 1 );
dta = Data Table( "table A" );
dtb = Data Table( "table B" );
// Place all timestamp values from Table A & B
timesa = dta:timestamp << get values;
timesb = dtb:timestamp << get values;
// Find the row to add the data to
rows = Loc Sorted( timesa, timesb );
// Add the new columns to Table A
dta << New Column( "sensor1" );
dta << New Column( "sensor2" );
dta << New Column( "sensor3" );
// Loop through matrix rows and add the records to the appropriate
// row in Table A
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[theRow] = dtb:sensor1[i];
dta:sensor2[theRow] = dtb:sensor2[i];
dta:sensor3[theRow] = dtb:sensor3[i];
);
Re: 타임스탬프를 기반으로 테이블 업데이트ErraticAttach와 txnelson에 감사드립니다.
Jim, 인덱싱이 어떻게 든 거꾸로 된 것일 수 있습니까?
정렬 된 Loc은 테이블 B에 넣고 싶은 정보가 포함 된 테이블 A의 행 번호 B의 각 행에 대해 가져옵니다.
그러나 범위 지정에 대한 루프 내부에서 오류가 발생합니다.
1. 내가 올바르게 이해한다면 "행"은 테이블 B와 동일한 수의 행을 가져야 합니다.
2. 매개변수 "i"가 1에서 B의 행 수로 증가합니다.
3. 루프의 각 반복에서 매개변수 "theRow"는 "행"의 해당 i번째 숫자에 할당됩니다.
따라서 실제로 원하는 데이터를 보유하는 테이블 A의 특정 라인을 나타내는 숫자를 보유합니다.
4. 이제 우리가 해야 할 일은 A의 해당 행에 있는 값을 읽고 원하는 열에 있는 B의 i번째 행에 넣는 것입니다.
그러나 "범위가 지정된 데이터 테이블 액세스에는 액세스 또는 평가에 데이터 테이블 열 또는 변수가 필요합니다."라는 오류가 발생합니다.
코드를 보면 스크립트가 잘못된 숫자를 인덱스로 참조하고 있다고 생각합니다.
그래서 [i]와 [Row] 사이를 전환했습니다.
"
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[theRow] = dtb:sensor1[i];
dta:sensor2[theRow] = dtb:sensor2[i];
dta:sensor3[theRow] = dtb:sensor3[i];
);
실제로 읽어야 한다
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[i] = dtb:sensor1[theRow];
dta:sensor2[i] = dtb:sensor2[theRow];
dta:sensor3[i] = dtb:sensor3[theRow];
);
그러나 그것도 도움이되지 않습니다.
나는 여전히 JSL에 익숙하지 않습니다. 그래서 값을 지정하는 방식이나 열과 행이 올바르지 않을 수 있습니까?
매우 감사합니다.