基于时间戳更新表你好,
我有两张桌子。 (甲和乙)
表 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,所以可能是我指定值的方式或列和行不正确?
非常感谢你。