タイムスタンプに基づいてテーブルを更新するこんにちは、
私は2つのテーブルを持っています。 (AおよびB)
表Aには、期間の開始と特定のタイムスタンプでの期間の名前を示す(テスト期間中の2000イベント)イベントが含まれています(下線はヘッダーです)
タイムスタンプ、期間
30-12-2021 17:35:49.1、A
30-12-2021 17:39:36.8、B
..。
したがって、期間Aは「30-12-202117:35:49.1」と「30-12-202117: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のPeriod値を使用してテーブルBにnow列を追加したいと思います。
BのタイムスタンプがテーブルAの行(N)のタイムスタンプ以上であり、テーブルAの行(N + 1)のタイムスタンプよりも小さい場合、行(N)の期間値がテーブルのそのレコードに割り当てられます。 B(BのタイムスタンプはAの2つのタイムスタンプの間にあります)
助言がありますか?
ありがとう
ウィンドウズRe:タイムスタンプに基づいてテーブルを更新しますルックアップテーブルを並べ替えて使用するLoc Sorted() 。 スクリプトインデックスの関数をチェックして、どのように機能するかを確認してください。
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に感謝します
ジム、それはインデックスがどういうわけか後方にあるということでしょうか?
ソートされたLocは、Bの各行について、テーブルBに入れたい情報を含むテーブルAの行番号を取得しています。
ただし、ループ内でスコープに関するエラーが発生します。
1.正しく理解していれば、「行」はテーブルBと同じ行数である必要があります
2.パラメータ「i」が1からBの行数に増加します。
3.ループの各反復で、パラメーター「theRow」には「rows」の対応するi番目の番号が割り当てられます。
したがって、実際には、必要なデータを保持するテーブルAの特定の行を表す数値が保持されます。
4.これで、その行のAの適切な列の値を読み取り、それを必要な列のBのi番目の行に配置するだけです。
ただし、「スコープデータテーブルへのアクセスには、...のアクセスまたは評価でデータテーブルの列または変数が必要です」というエラーが表示されます。
コードを見ると、スクリプトがインデックスとして間違った番号を参照していると思います。
だから私は[i]と[theRow]を切り替えました
「」
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に精通していないので、値を指定する方法や列と行が間違っている可能性がありますか?
どうもありがとうございました。