基于JobNumber将Main表各测试首次时间同步至Info表
需求:将Main表中每个JobNumber的最早时间同步到Info表
需求背景
JobNumber为手动录入,可能存在数据完整性问题,同步时间值后便于修正数据。
具体需求
现有两张测试记录表:
- Main表:每个测试对应多行数据,包含
Time(日期时间)和JobNumber字段 - Info表:每个测试仅对应一行数据,包含
JobNumber字段,需添加对应测试的起始时间
需通过JobNumber关联两张表,提取Main表中每个JobNumber对应的最早Time值,同步到Info表对应JobNumber的行中。
数据示例
Main表原始数据
| Time | JobNumber |
|---|---|
| 2023-05-30 10:57:51 | 1500 |
| 2023-05-30 10:57:52 | 1500 |
| 2023-05-30 10:57:53 | 1500 |
| 2018-12-21 10:32:56 | 499 |
| 2018-12-21 10:32:57 | 499 |
| 2019-10-03 15:28:56 | 777 |
同步后的Info表数据
| Time | JobNumber |
|---|---|
| 2023-05-30 10:57:51 | 1500 |
| 2018-12-21 10:32:56 | 499 |
| 2019-10-03 15:28:56 | 777 |
SQL实现方案
关联更新语句
UPDATE Info i INNER JOIN ( SELECT JobNumber, MIN(Time) AS StartTime FROM Main GROUP BY JobNumber ) m ON i.JobNumber = m.JobNumber SET i.Time = m.StartTime;
补充说明
- 子查询通过
GROUP BY JobNumber和MIN(Time)提取每个测试的最早时间 - 使用
INNER JOIN确保只更新Info表中存在于Main表的JobNumber行 - 若需处理Info表中存在但Main表无对应
JobNumber的情况,可改用LEFT JOIN并设置默认值(例如SET i.Time = COALESCE(m.StartTime, '1970-01-01 00:00:00'))
内容的提问来源于stack exchange,提问作者LikeMatt
相关产品推荐
相关产品推荐

