既存のオブジェクトとコンテンツ
master という名前の特定のテーブルが更新されるたびに記録する history_master という名前のテーブルがあります。マスターテーブルの歴史のようなものです。マスター テーブルには最新のデータのみが含まれます
内容の一例を挙げると
マスターテーブル
| | ID | アイテム番号| | から有効 | まで有効 | | 1 | 1 | 2012-12-25 | 2012-12-31 | | | 2 | 1 | 2013-01-01 | 2013-04-30 | | | 3 | 2 | 2013-01-10 | 2013-12-31 |
history_master は次のようになります
| | ID | アイテム番号 | | から有効 | まで有効 更新日 | | | 1 | 1 | 2012-01-01 | 2012-06-30 | 2012-02-01 | | | 2 | 1 | 2012-07-01 | 2012-12-31 | 2012-02-01 | | | 3 | 1 | 2012-01-01 | 2012-06-30 | 2012-05-01 | | | 4 | 1 | 2012-07-01 | 2012-11-30 | 2012-05-01 | | | 5 | 1 | 2012-12-01 | 2012-12-31 | 2012-05-01 | | | 6 | 1 | 2012-07-01 | 2012-11-30 | 2012-08-01 | | | 7 | 1 | 2012-12-01 | 2012-12-24 | 2012-08-01 | | | 8 | 1 | 2012-12-25 | 2012-12-31 | 2012-08-01 |
手元のタスク: 最新のデータを保持する履歴からアイテムの利用可能なすべてのデータを取得するストアド プロシージャを記述します。つまり、結果は次のようになります。
| | アイテム番号 | | から有効 | まで有効 history_id | | | 1 | 2012-12-25 | 2012-12-31 | 8 | | | 1 | 2012-12-01 | 2012-12-24 | 7 | | | 1 | 2012-07-01 | 2012-11-30 | 6 | | | 1 | 2012-01-01 | 2012-06-30 | 3 |
私が考えたロジックは、履歴テーブルからバッチを決定することです。たとえば、更新日が 2012-08-01 のレコードはバッチ = 3、2012-05-01 はバッチ = 2、最後はバッチ = 1 になります。
最新 (3) から最も古い (1) まですべてのバッチを反復処理し、日付範囲を比較して、最新のセットのデータが常に優先されることに留意して結果を決定します。
私が考えることができる実装への唯一の方法は WHILE LOOP であり、それが最善の方法であるかどうかはわかりません。
履歴マスターには、現在 10155734 レコードが含まれています。提案してください