用於更新一個表與另一個表的精確匹配和最近匹配我有一個大數據表(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 )] );