基於時間戳更新表你好,
我有兩張桌子。 (甲和乙)
表 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 個數據點的時間戳(帶下劃線的行是標題)
時間戳,傳感器1,傳感器2,傳感器3 ……
30-12-2021 17:37:21.2,價值,價值,價值,...
2021 年 12 月 30 日 17:37:22.2,價值,價值,價值,...
30-12-2021 17:37:23.2,價值,價值,價值,...
我想根據 B 中時間戳的值向表 B 添加一個 now 列,其中包含表 A 中的 Period 值。
如果 B 中的時間戳大於或等於表 A 中行 (N) 中的時間戳並且也小於表 A 中行 (N+1) 中的時間戳,則將為表中的該記錄分配行 (N) 中的周期值B(B中的時間戳在A中的兩個時間戳之間)
有什麼建議?
謝謝
視窗Re: 根據時間戳更新表對查找表進行排序並使用Loc 排序() . 檢查腳本索引中的函數以了解它是如何工作的。
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 中的每一行獲取表 A 中的行號,其中包含我要放入表 B 中的信息
但是,我在循環內得到一個關於範圍的錯誤。
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,所以可能是我指定值的方式或列和行不正確?
非常感謝你。