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