mysql - 仅当数据自上次记录以来按日期发生更改时才向表中添加记录

标签 mysql date merge

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

我有第一个表,它是 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 中查找带有 TeamScoreTeamWorkUnits 的最新记录 不同于LatestResults 表记录。如果找到这样的记录,则外部selectLatestResults中选择合适的记录,最后将这些记录插入到HistoricResults中。

关于mysql - 仅当数据自上次记录以来按日期发生更改时才向表中添加记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563205/

相关文章:

php - ORDER BY 不与 GROUP BY 一起使用

mysql - MySQL 查询中的 LEFT JOIN

ios - 按日期组件获取本地时区日期

mysql - 更新表中的 FromDate 和 ToDate 列

bash - 合并 CSV 文件 : Appending instead of merging

sql - Oracle SQL - 匹配时更新并插入

MySQL 帮助 REGEXP 尝试将邮政编码从 9 位数缩短为 5 位数

php - 从名称列表下拉表单中提取 MySQL INSERT 的 ID

sql - Oracle 11g - FOR 循环仅将工作日插入表中?

python - 根据Python中另一个数组上的重复值合并数组?