4

我正在处理时间序列数据,其键列是时间戳: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

我的问题是:它会一次移动所有键,还是会尝试逐行移动每一行,导致在移动范围内产生大量重复键?

你有没有更好的方法来做到这一点?提前致谢

4

1 回答 1

3

它会一次移动所有键,还是会尝试逐行移动每一行

它会一次移动所有的键。

导致移位范围内的大量重复键?

如果任何主键重复,它就会失败。
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 回答