[英]How to fetch the latest status from a table of Updates and join it with table of details in MySQL?
我正在使用的两个表是:
CREATE TABLE `UPDATE_TABLE` (
`DETAIL_ID` VARCHAR(10),
`UPDATE_ID` VARCHAR(10) NOT NULL,
`STATUS` ENUM('COMPLETE','INCOMPLETE') NOT NULL,
`UPDATED_ON` DATETIME NOT NULL,
PRIMARY KEY (`UPDATE_ID`),
FOREIGN KEY(`DETAIL_ID`) REFERENCES `TASK_DETAIL` (`DETAIL_ID`)
);
CREATE TABLE `DETAIL_TABLE` (
`DETAIL_ID` VARCHAR(10) NOT NULL,
`NAME` VARCHAR(50),
);
我需要详细信息:最终结果中的 DETAIL_ID、NAME、STATUS(最新)、UPDATED_ON。 我目前正在做的是:
SELECT t.* FROM update_table t WHERE UPDATED_ON in ( SELECT MAX(UPDATED_ON) as latest_update FROM update_table group by DETAIL_ID ) 以获取最新更新的详细信息,并在 detail_table 上执行左连接。
但是当多个 detail_id 具有相同的 updated_on 时,问题就来了。 例如:
UPDATE_TABLE:
100, 1, INCOMPLETE 2021-04-03 17:03:34
200, 2, INCOMPLETE 2021-04-03 17:03:34
300, 3, INCOMPLETE 2021-04-03 17:03:34
200, 4, COMPLETE 2021-04-04 11:50:41
所以这给了我 2 个 detail_id = 200 的更新。我只需要最新的更新。
SQLAlchemy 查询将是一个很好的奖励!
如果 UPDATE_TABLE 上的 UPDATED_ON 字段从来没有与 1 DETAIL_ID 相同的值,那么这应该适用于您的情况
CREATE TABLE `UPDATE_TABLE` (
`DETAIL_ID` VARCHAR(10),
`UPDATE_ID` VARCHAR(10) NOT NULL,
`STATUS` ENUM('COMPLETE','INCOMPLETE') NOT NULL,
`UPDATED_ON` DATETIME NOT NULL,
PRIMARY KEY (`UPDATE_ID`)
);
Insert into `UPDATE_TABLE` values('100','1','INCOMPLETE','2021-04-03 17:03:34');
Insert into `UPDATE_TABLE` values('200','2','INCOMPLETE','2021-04-03 17:03:34');
Insert into `UPDATE_TABLE` values('300','3','INCOMPLETE','2021-04-03 17:03:34');
Insert into `UPDATE_TABLE` values('200','4','COMPLETE','2021-04-04 11:50:41');
DETAIL_ID | UPDATE_ID | 地位 | UPDATED_ON |
---|---|---|---|
100 | 1 | 未完成 | 2021-04-03 17:03:34 |
200 | 2 | 未完成 | 2021-04-03 17:03:34 |
300 | 3 | 未完成 | 2021-04-03 17:03:34 |
200 | 4 | 完全的 | 2021-04-04 11:50:41 |
这是您需要的:
select ut.*
from `UPDATE_TABLE` ut
inner join (select detail_id, max(updated_on) as 'updated_on'
from `UPDATE_TABLE`
group by detail_id) tbl
on ut.detail_id = tbl.detail_id and ut.updated_on = tbl.updated_on
order by detail_id
结果:
DETAIL_ID | UPDATE_ID | 地位 | UPDATED_ON |
---|---|---|---|
100 | 1 | 未完成 | 2021-04-03 17:03:34 |
200 | 4 | 完全的 | 2021-04-04 11:50:41 |
300 | 3 | 未完成 | 2021-04-03 17:03:34 |
您可以尝试以下SQL查询以获取所需的结果:Z63225F19FCCBB18E7C709F1FA1FA1FA1FA11BC738EZ DISTINPLED(UT.DETAIL_ID) UPDATED_ON = (SELECT MAX(UPDATED_ON) FROM UPDATE_TABLE WHERE DETAIL_ID = ut.DETAIL_ID);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.