1

我需要帮助来尝试找到一种仅在数据发生更改时才将数据添加到表中的有效方法。

我有第一个表,它是最新结果,只存储最新结果(每个团队编号 1)

TeamNumber(Primary) TeamScore TeamWorkUnits RecordDateTime
1 - 500 - 600 - 2012-09-22 08:20:00
2 - 400 - 6 - 2012-09-22 08:20:00
3 - 90 - 15 - 2012-09-22 08:20:00
4 - 1 - 0 - 2012-09-22 08:20:00

另一个名为HistoricResults的表存储非常结果的副本,以防我将来需要它进行统计。

HisotryKey(Auto-Primary) TeamNumber TeamScore TeamWorkUnits RecordDateTime
1 - 1 500 - 600 - 2012-09-22 08:20:00
2 - 2 -400 - 6 - 2012-09-22 08:20:00
3 - 3- 90 - 15 - 2012-09-22 08:20:00
4 - 4 - 1 - 0 - 2012-09-22 08:20:00
5 - 1 490 - 600 - 2012-09-21 08:20:00
6 - 2 -300 - 6 - 2012-09-21 08:20:00
7 - 3- 40 - 15 - 2012-09-21 08:20:00
8 - 4 - 0 - 0 - 2012-09-21 08:20:00

因此,仅当数据 TeamScore 或 TeamWorkUnits 自 RecordDateTime 的最后一条记录以来发生更改时,我才想将第一个表合并到第二个表中。

这意味着如果 TeamScore 和 TeamWorkUnits 相同,您将保留历史表中最旧的条目。

如果可能的话,我宁愿完全在 MySQL 中执行此操作以提高速度。

目前我需要每小时检查大约 100,000 条记录

在此先感谢您的帮助。

4

1 回答 1

1

您可以尝试这种方法:

insert into HistoricResults 
  (teamNumber, TeamScore, TeamWorkUnits, RecordDateTime)
  select
    lr.teamNumber, 
    lr.TeamScore, 
    lr.TeamWorkUnits,
    NOW()
  from
    LatestResults lr
  where 
    exists (
      select 
        *
      from
        HistoricResults hs
      where
        hs.teamNumber = lr.teamNumber and
        (hs.TeamScore != lr.TeamScore or hs.TeamWorkUnits != lr.TeamWorkUnits)
        and hs.RecordDateTime = (select max(RecordDateTime) 
                                 from HistoricResults hs1 
                                 where hs1.teamNumber = lr.teamNumber)
      order by RecordDateTime desc
    )

它应该是这样工作的:内部的子查询exist正在寻找与表记录有或不同HistoricResults的最新记录。如果找到这样的记录,则 external从中选择适当的记录,并将这些记录最终插入到.TeamScoreTeamWorkUnitsLatestResultsselectLatestResultsHistoricResults

于 2012-09-24T16:04:53.090 回答