mysql - Mysql从历史表中提取并保留历史表
问题描述
我有一个简单的表 machine_info 作为,
+-------+-------+-------+-------+--------------------------+
|Module |Machine| VAL | FLG | Timestamp |
+-------+-------+-------+-------+------------------------- +
| T-01 | Tron | 1 | Y | 2020-01-01 11:22:33 |
| T-01 | Tron | 2 | Y | 2020-01-01 11:23:33 |
| T-01 | Tron | 1 | Y | 2020-01-01 11:24:33 |
| T-02 | Volt | 4 | Y | 2020-01-01 11:25:33 |
+-------+-------+-------+-------+--------------------------+
我正在尝试实现一个结果,其中第二个表的新条目出现(例如,倒数第二行,T-01,Tron和1第二次以较新的时间戳值出现)有触发器或其他东西仅将最新记录推送到新表中,以便重复输入 Module、Machine 和 Val,但时间戳较新。
新表将是 machine_info 的精确副本,但仅包含一个具有最新时间戳的唯一模块、机器和 VAL 组合的条目。就像是,
+-------+-------+-------+-------+--------------------------+
|Module |Machine| VAL | FLG | Timestamp |
+-------+-------+-------+-------+------------------------- +
|
| T-01 | Tron | 2 | Y | 2020-01-01 11:23:33 |
| T-01 | Tron | 1 | Y | 2020-01-01 11:24:33 |
| T-02 | Volt | 4 | Y | 2020-01-01 11:25:33 |
+-------+-------+-------+-------+--------------------------+
如果 T-01, Tron, 1 再次出现在 machine_info 表中,则副本表应使用较新的时间戳值覆盖该组合的现有值,并将副本中的其他行保持原样。这同样适用于所有此类独特的组合。
最后将有一个包含所有历史信息的表和另一个仅包含最新记录的表。
我应该采取什么方法来实现这一目标?我正在使用 mysql-5.7.7
解决方案
您可以使用触发器来执行此操作。定义目标表,比如machine_info_latest
,以匹配原始表。然后在 上添加唯一列或约束(Module, Machine, VAL)
。
然后您的插入触发器machine_info
可以使用insert . . . on duplicate key update
:
insert into machine_info_lastest (Module, Machine, VAL, FLG, Timestamp)
values (new.Module, new.Machine, new.VAL, new.FLG, new.Timestamp)
on duplicate key update
FLG = values(FLG),
Timestamp = values(Timestamp);
推荐阅读
- firebase - FIREBASE - 如何根据数据中单词的出现频率对集合中的数据进行排序
- javascript - Pyodide:ReferenceError:SharedArrayBuffer 未定义
- php - Guzzle 获取带有标头和查询字符串的请求
- python - 在 Azure Data Bricks 中并行运行 python 笔记本
- python - KIVY 滚动视图不会显示任何内容,只是一个空白屏幕
- javascript - 根据响应式设计获取坐标
- android - 如何在 kts 构建脚本中设置可调试属性
- amazon-web-services - AWS IAM 策略名称是否与 AWS 策略 ARN 中定义的资源名称相同?
- reactjs - 在 React JS 中更新状态时如何重新映射对象数组?
- react-native - 如何在 createDrawerNavigator 中创建带空格的标签?