4

キー列が timestamp : Timeである時系列データに取り組んでいます。各行には多くの「値」列もあります。

データの範囲全体を数時間シフトしようとしています (夏時間の問題のため)。そのために、いくつかの行のキーを更新しますが、重複キーが発生する可能性があります。日付範囲の端にある重複キーを無視したいと思います。シフトされた範囲が古い範囲を上書きするようにします。

私は次のようなことをする予定です:

UPDATE IGNORE time_series_table 
SET time=time-<some_shift> 
WHERE <time in a date-range>

describe <table>時間キーの出力は次のとおりです。

Field     Type      Null Key     Default Extra
TimeMeas  datetime  NO   PRI     NULL

私の質問は次のとおりです。すべてのキーを一度にシフトしますか、それとも各行を1つずつシフトしようとし、シフトされた範囲自体に大量の重複キーが発生しますか?

これを念頭に置いて行うより良い方法はありますか?前もって感謝します

4

1 に答える 1

3

一度にすべてのキーをシフトしますか、それとも各行を 1 つずつシフトしようとしますか?

一度にすべてのキーをシフトします。

シフトされた範囲自体で大量の重複キーが発生しますか?

主キーのいずれかが重複していると失敗しました。
ではupdate ignore、黙ってスキップするだけです。

これは、これを修正するための私のアプローチです

/* create a temporary table to store matches records*/
create table tmp_table select time-<some_shift>, etc_cols....
from time_series_table 
where <time in a date-range>;

それから

/* delete the matches in the original table */
delete from time_series_table where <time in a date-range>;
delete from time_series_table where <time in a date-range - some_shift>;

最後に

/* at this point, there won't be any duplicate data */
/* so, insert back into original table */
insert into time_series_table select * from tmp_table;
optmize table time_series_table;
于 2011-09-29T09:06:49.870 に答える