我需要帮助来尝试找到一种仅在数据发生变化时才将数据添加到表中的有效方法。
我有第一个表,它是 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条记录
预先感谢您的帮助。
最佳答案
你可以试试这个方法:
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
中。
关于mysql - 仅当数据自上次记录以来按日期发生更改时才向表中添加记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563205/