繁体   English   中英

如何从更新表中获取最新状态并将其与 MySQL 中的详细信息表连接?

[英]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

dbfiddle在这里

您可以尝试以下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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM