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