[英]How to compare data from two tables in sql?
我有这样的表:
我想在last_update的列上获得最大值,所以我使用以下查询:
SELECT idtemp, max(last_update) FROM `registrationdate`
那么结果将是这样的:
我有这样的表:
然后我想比较registrationdate's table
max(last_update)和temp's table
generatedtime
这是模式:
我该怎么做才能得到这样的桌子? 提前致谢。
Fyi, registrationdate's table
idtemp = 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;
假设条件
在registrationdate
没有至少一个匹配记录的temp
记录不需要在输出中包括。
比较和样本数据有效,并且样本输出的UPDATEorNot
字段应读取为not
。
说明
该语句以一个子查询开始,该子查询查找registrationdate
中idtemp
每个唯一值以及idtemp
关联的last_update
最新值。
然后,在temp
和子查询的结果之间执行INNER JOIN
,以便保留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;
附录二
请尝试以下尝试重写的链接至代码...
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.