2011-04-28 62 views
5

我有一個表:'人'有很多列。 我需要返回沒有「重複」(定義如下)的每個條目的全行以及下列內容:查找該表中共享屬性的條目:first_name,last_name和work_phone(這些是重複的我的目的),並只返回date_modified字段中最新值的條目,而忽略其餘部分。SQL查詢返回重複最近的日期和更多

我覺得這是一個相當先進的查詢,或者看起來很簡單。無論哪種方式,我無法弄清楚。我使用MySQL只5.

回答

7

返回條目在其DATE_MODIFIED領域的最新價值,忽略其它:

SELECT p.* FROM 
    (SELECT max(date_modified) as most_recent_date 
    FROM person 
    GROUP BY first_name,last_name,work_phone) p1 
JOIN person p 
ON p.date_modified = p1.most_recent_date 

這將很好地工作假設DATE_MODIFIED是領域的每個組合我們獨特的分組上。如果不是,我們必須加入一個唯一的字段,取一個滿足最新條件的任意UUID(限制1)。

SELECT p.* FROM 
    (SELECT *,max(date_modified) as most_recent_date 
    FROM person 
    GROUP BY first_name,last_name,work_phone) p1 
JOIN person p 
ON p.UUID = 
    (SELECT p_uniq.UUID 
    FROM person p_uniq 
    WHERE p_uniq.first_name = p1.first_name 
     AND p_uniq.last_name = p1.last_name 
     AND p_uniq.work_phone = p1.work_phone 
     AND p_uniq.date_modified = p1.most_recent_date 
    LIMIT 1) 

最後,返回完整的行不具有「重複」的每個條目的:

SELECT * , count(*) AS entries 
FROM `person` 
GROUP BY first_name, last_name, work_phone 
HAVING entries =1 
+0

此查詢返回兩倍多的結果也有在人表條目。它會像我問的那樣返回重複的行,但它會返回每一個10-12次。 – Yottagray 2011-04-28 20:19:37

+0

條目是否有可能具有完全相同的date_modified字段? – piotrm 2011-04-28 20:23:37

+0

是的,他們做...拍攝。 – Yottagray 2011-04-28 20:33:01