テーブルを別のテーブルで更新するための完全一致と最近接一致大きなデータテーブル(100万行)があります。1 つの列は SerialNumber、1 つの列は dateTime、1 つの列は elapsedTime です。別のはるかに小さいテーブルにもこれらの列がありますが、dateTime は少しだけ (5 ~ 20 分) 早くなり、elapsedTime ははるかに正確な値です。この小さなテーブルには、他の dateTime の他のイベントに関連付けられた余分な行もたくさんあります (「event」列はありません)。SerialNumbers を照合し、大きなテーブルの dateTime 以下の最大の dateTime を選択することで、大きなテーブルを正確な elapsedTimes で更新したいと考えています。
これは、毎日実行されるより大きなスクリプトの一部となり、各シリアル番号を毎日更新します。
現時点での私の最善の解決策は、精度を犠牲にして、単に 1 日全体の平均 elapsedTime を選択し、dateTime 列に完全に一致するものを使用することです。これにより、小さなテーブルに特定の日内の複数回の複数のイベントが含まれる場合には不正確になりますが、「12 時間以内」は依然として大きなテーブルよりもはるかに正確です。
ネストされた foreachrows ループのペアを使用する別の解決策もありますが、それは非常に遅くなります。
アイデアがある場合は、コードを書くことを (まだ) 心配しないで、提案してください。
ありがとう、
ジョナサン
Re: テーブルを別のテーブルで更新する場合の完全一致と最近接一致これは私が過去に使用した方法であり、より高速に実行されます。 ただし、前後にインターリーブされたレコードがないレコードに注意してください。
Re: テーブルを別のテーブルで更新する場合の完全一致と最近似一致TX、あなたのスピードと理解力には驚かされます。あなたの答えは、各SNループの遅さについて微妙に言及していません。
投稿を終えようとしていたとき、私は次のようなアイデアを思いつきました。
小さなテーブルの日付ウィンドウのみを選択して、大きなテーブルをサブセット化します。
elapsedTime 列を除いて、サブセット テーブルを小さなテーブルに連結します。
連結テーブルをSNと日時でソートします
不足している elapsedTimes を前の行で埋めます。
大きなテーブルを連結テーブルで更新します。
Re: テーブルを別のテーブルで更新する場合の完全一致と最近似一致次のようなものを使用することをお勧めします。
theRows = dt2 << select rows where( dt2:serialNumber == dt21:serialNumber[i] &
dt2:dateTime <= dt1:dateTime );
if( N Rows( theRows ) > 0, targetRow = theRows[N Rows( theRows )] );