我需要帮助尝试找到一种只有在数据发生变化时才能将数据添加到表中的有效方法。
我有第一个表 LatestResults ,只存储最新结果(每个团队编号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条记录
提前感谢您的帮助。
答案 0 :(得分: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
查找TeamScore
或TeamWorkUnits
与LatestResults
不同的最新记录记录。如果找到此类记录,则外部select
会从LatestResults
中选择适当的记录,并且此类记录最终会插入HistoricResults
。