2011-04-28 2 views
5

나는 많은 열을 가진 'person'테이블을 가지고 있습니다. 다음과 같이 "duplicate"(아래 정의 됨)가없는 모든 항목의 전체 행을 반환해야합니다. first_name, last_name 및 work_phone 속성을 공유하는 해당 테이블에서 항목을 찾습니다 (중복 항목입니다. 내 목적), date_modified 필드에 가장 최근 값을 가진 항목 만 반환하고 나머지는 무시합니다.SQL 쿼리는 가장 최근의 날짜와 더 많은 것을 반환합니다.

나는 이것이 고급 쿼리이거나 기만적으로 간단하다고 생각합니다. 어쨌든 나는 그것을 알 수 없다.

이 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 분야에서 가장 최근의 값으로 MySQL의 5

답변

7

반환 항목 만 사용하고 에. 그렇지 않다면 가장 최근의 조건을 만족하는 임의의 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

+0

항목에 정확히 date_modified 필드가있을 수 있습니까? – piotrm

+0

예 그들은 촬영합니다. – Yottagray

관련 문제