gpt4 book ai didi

mysql - 如何用sql比较两个表的数据?

转载 作者:行者123 更新时间:2023-11-29 10:49:48 38 4
gpt4 key购买 nike

我有这样的表:

  • 表格名称:注册日期

enter image description here

我想获取last_update列的最大值,所以我使用这个查询:

SELECT idtemp, max(last_update) FROM `registrationdate`

那么结果将是这样的:

enter image description here

我有这样的表格:

  • 表名称:临时

enter image description here

然后我想比较registrationdate's table中的max(last_update)generatedtimetemp's table

这是架构:

enter image description here

我该怎么做才能得到这样的 table ?提前致谢。

仅供引用,idtempregistrationdate's table = temp's table 中的 id

最佳答案

请尝试以下操作...

SELECT ID AS ID,
generatedTime AS generatedTime,
tempTable AS tempTable,
CASE
WHEN generatedTime < maxLastUpdate THEN
'not'
ELSE
'update'
END AS UPDATEorNot
FROM temp
JOIN ( SELECT idtemp AS idtemp,
MAX( last_update ) AS maxLastUpdate
FROM registrationdate
GROUP BY idtemp
) AS maxLastUpdateFinder ON temp.ID = maxLastUpdateFinder.idtemp;

假设

记录在 temp registrationdate 中至少没有一条匹配记录不需要包含在输出中。

比较数据和样本数据有效,并且样本输出的 UPDATEorNot字段应为 not .

说明

此语句以一个子查询开始,该子查询查找 idtemp 的每个唯一值。在registrationdate以及 last_update 的最新值与之相关。

INNER JOIN然后在 temp 之间执行以及子查询的结果使得 temp 中的每条记录registrationdate 中至少有一条对应记录被保留并具有其对应的最新值 last_update附加到它。

来自 temp 的字段那么 SELECT编辑,以及 CASE用于确定为每个记录的 UPDATEorNot 选择的值的语句字段。

请注意,我的语句将返回 not当您提供的比较应用于样本数据时。如果你想要update要被选中,那么您需要将比较从 generatedTime < max( last_update ) 更改为至generatedTime > max( last_update ) ,或者更正您的示例数据。

测试

我的语句针对使用以下脚本创建的示例数据库进行了测试...

CREATE TABLE registrationdate
(
last_update DATETIME,
idtemp INT
);
INSERT INTO registrationdate ( last_update,
idtemp )
VALUES ( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 ),
( '2017-05-12 14:20:58', 0 );
CREATE TABLE temp
(
ID INT,
generatedTime DATETIME,
tempTable VARCHAR( 50 )
);
INSERT INTO temp ( ID,
generatedTime,
tempTable )
VALUES ( 0, '2017-05-01 14:37:00', 'temp_pelamardoktorjk' ),
( 2, '2017-05-01 14:37:00', 'temp_pelamarmagisteripk' ),
( 3, '2017-05-01 14:38:00', 'temp_pelamarmagisterstatusinstitusi' ),
( 4, '2017-05-01 14:38:00', 'temp_pelamarmagisterusia' ),
( 5, '2017-05-01 14:38:00', 'temp_pelamarmagisterstatusinstansi' );

如果您有任何问题或意见,请随时发表评论。

附录1

以下是上述语句的另一种形式...

SELECT ID AS ID,
generatedTime AS generatedTime,
tempTable AS tempTable,
CASE
WHEN generatedTime < MAX( last_update ) THEN
'not'
ELSE
'update'
END AS UPDATEorNot
FROM temp
JOIN registrationdate ON temp.ID = registrationdate.idtemp
GROUP BY ID,
generatedTime,
tempTable;

附录2

请尝试以下尝试重写链接到的代码...

SELECT 
generatedTime AS generatedTime,
tempTable AS tempTable,
CASE
WHEN ( ( generatedTime < ( SELECT MAX( last_update ) AS maxPelamarmhsdoktor
FROM pelamarmhsdoktor ) ) OR
( generatedTime < ( SELECT MAX( last_update ) AS maxAkdmstmayor
FROM akdmst_mayor ) ) OR
( generatedTime < ( SELECT MAX( last_update ) AS maxIpbmstdepartemen
FROM ipbmst_departemen ) ) OR
( generatedTime < ( SELECT MAX( last_update ) AS maxIpbmstfakultas
FROM ipbmst_fakultas ) ) OR
( generatedTime < ( SELECT MAX( last_update ) AS maxIpbrefjeniskelamin
FROM ipbref_jeniskelamin ) ) OR
( generatedTime < ( SELECT MAX( last_update ) AS maxJenisinstansi
FROM jenisinstansi ) ) OR
( generatedTime < ( SELECT MAX( last_update ) AS maxJenisinstitusi
FROM jenisinstitusi
) ) ) THEN
'Yes'
ELSE
'No'
END AS NeedsToUpdateOrNot
FROM generatedTime;

关于mysql - 如何用sql比较两个表的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948455/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com