0

オブジェクトのさまざまな属性を経時的に追跡するテーブルを作成しました。

 Id | Attribute1 | Attribute2 | Attribute3 | StartDate  | EndDate
------------------------------------------------------------------
 01 |   100      |   Null     |   Null     | 2004-02-03 | 2006-04-30
 01 |   100      |   Null     |    D       | 2006-05-01 | 2010-11-06
 01 |   150      |   Null     |    D       | 2010-11-07 | Null
 02 |   700      |   5600     |   Null     | 1998-09-27 | 2002-01-27

新しいデータ (~数万件のレコード) が毎日入ってきます。私がやりたいことは、各レコードをその ID の現在のデータと比較することです。

a) 属性が一致する場合は何もしません。b) 属性が異なる場合は、EndDate が現在の日付になるように現在のレコードを更新し、新しい属性で新しいレコードを作成します。c) その ID のデータがない場合は、新しいレコードを作成します。

私の質問は、これを行う最も効率的な方法は何ですか?

各レコードを処理し、比較を行い、必要に応じてテーブルを更新するスクリプトを作成することはできますが、これはインテリジェントなソリューションではなく、力ずくで行う方法だと思いました。

これはカーソルを使用するのに適した場所でしょうか?

4

1 に答える 1

0

どのようにデータを処理しますか? そのままですか、それともバッチですか?

そのままの場合は、変更される可能性が最も高い属性と最も可能性が低い属性 (チェックを少し最適化するため) に対して一連のチェックを行い、必要に応じて更新します。数万のデータでは、速度が低下しすぎることを心配するのに十分なデータではありません。これは単純なアプローチです。

バッチとして処理する場合 (毎日の営業終了時など)、データを ID で並べ替え、次に終了日の降順で並べ替えます。ID の他のすべてのインスタンスを削除し、最新のものだけを気にします。中間データは重要ではありません。

例: ID 1 の 2 つのエントリがあり、1 つは endDate Jan 1 で、もう 1 つは endDate Jan 25 です。最初に 1 月 25 日のエントリを見て、必要に応じて更新します。1 月 1 日のエントリは、その時点で気にするには古すぎます。

于 2014-06-20T14:15:46.273 に答える