用于更新一个表与另一个表的精确匹配和最近匹配我有一个大数据表(1M 行)。一列是serialNumber,一列是dateTime,一列是elapsedTime。另一个小得多的表也有这些列,但 dateTime 早了一点(5-20 分钟),并且 elapsedTime 是一个更准确的值。小表还有许多与其他日期时间的其他事件相关的额外行(我没有“事件”列)。我想通过匹配序列号并选择小于或等于大表日期时间的最大日期时间来用准确的 elapsedTimes 更新大表。
这将是每天运行的更大脚本的一部分,每天更新每个序列号。
现在,我最好的解决方案是在准确性上做出妥协,只选择一整天的平均 elapsedTime,并使用 dateTime 列的精确匹配。当小表在给定一天内多次包含多个事件时,这会带来不准确性,但“12 小时内”仍然比目前的大表准确得多。
还有另一种解决方案使用一对嵌套的 foreachrows 循环,但这会非常慢。
如果您有一个想法,请直接提出,不要担心编写代码(还)。
谢谢,
乔纳森
回复:用另一个表更新一个表的精确匹配和最近匹配这是我以前用过的方法,运行速度会更快。 但是,请查找后面或前面没有任何交错记录的记录。
回复:用另一个表更新一个表的精确匹配和最近匹配TX,我对你的速度和理解力感到惊讶。你的答案巧妙地没有提到每个 SN 循环的缓慢。
当我完成我的文章时,我开始有了这个想法:
对大表进行子集化,仅选择小表的日期窗口。
将子集表连接到不包括 elapsedTime 列的小表上。
按 SN 和日期时间对串联表进行排序
用上一行填充缺失的 elapsedTimes。
使用串联表更新大表。
回复:用另一个表更新一个表的精确匹配和最近匹配我建议你使用类似的东西;
theRows = dt2 << select rows where( dt2:serialNumber == dt21:serialNumber[i] &
dt2:dateTime <= dt1:dateTime );
if( N Rows( theRows ) > 0, targetRow = theRows[N Rows( theRows )] );