2016-03-01 29 views
0

我想標籤作爲複製如果它顯示在我的表不止一次一定的價值,但它應該在我行中排除的最新值,如果它是最新的。Mysql的選擇重複的和標籤作爲重複,但不包括最新的

在這裏我的表。

ref_id | access 
1234  2015-10-04 10:01:10 
1234  2015-10-04 10:02:10 
1234  2015-10-04 10:03:10 

這是我希望發生

ref_id | access    | tag  
1234  2015-10-04 10:01:10 duplicate 
1234  2015-10-04 10:02:10 duplicate 
1234  2015-10-04 10:03:10 

回答

1

您可以使用相關子查詢做到這一點:

SELECT ref_id, access, 
     IF((SELECT 1 
      FROM mytable AS t2 
      WHERE t1.ref_id = t2.ref_id AND 
       t2.access > t1.access LIMIT 1) = 1, 'duplicate', '') AS tag 
FROM mytable AS t1 

Demo here

或者您可以使用一個JOIN到具有最大日期值的記錄:

SELECT t1.ref_id, access, 
     IF(t1.access < t2.max_access, 'duplicate', '') AS tag 
FROM mytable AS t1 
INNER JOIN (SELECT ref_id, MAX(`access`) AS max_access 
      FROM mytable 
      GROUP BY ref_id 
) AS t2 ON t1.ref_id = t2.ref_id 

Demo here

UPDATE你可以使用:

UPDATE mytable AS t1 
INNER JOIN (SELECT ref_id, MAX(`access`) AS max_access 
     FROM mytable 
     GROUP BY ref_id 
) AS t2 ON t1.ref_id = t2.ref_id 
SET tag = 'duplicate' 
WHERE t1.access < t2.max_access; 

Demo here

+0

如果我我已經有一個標籤欄,我只是想將其更新爲值複製? –

+0

感謝您的更新查詢。無論如何,當我運行這個查詢時,訪問似乎改變爲今天的日期。任何解釋爲什麼? –

+0

我能夠知道爲什麼訪問日期是自動更新到今天的日期。它的數據類型是時間戳,更新current_timestamp打開。所以關掉它就成了訣竅。 ;) –