2012-06-07 3 views
1

안녕 얘들 아 나는 현재이 테이블MySQL을 사용하여 중복 그룹을 제거 하시겠습니까?

회원

**ID Position Latitude Longitute** 

1 1  1.38086 103.749 
1 2  1.38086 103.749 
1 3  1.38086 103.749  
1 4  1.48086 103.949 
1 5  1.48086 103.949  
1 6  1.48086 103.949 
1 7  1.58086 103.749  

내가 select * from meber group by latitude,longitute order by position desc를 사용하여 현재의 생각을 가지고있다. I 대신하여 그룹을 사용하여 낮은 위치의 가장 높은 위치를 나타내는 결과를 원

**ID Position Latitude Longitute** 
1 1  1.38086 103.749  
1 4  1.48086 103.949 
1 7  1.58086 103.749  

그러나이 발생할 것이다. 덧붙여

SELECT * 
FROM meber NATURAL JOIN (
    SELECT latitude,longitute,MAX(position) AS position 
    FROM  meber 
    GROUP BY latitude,longitute 
) AS t 

, 영어 단어 철자 : 모든 솔루션

답변

4

당신은 당신의 원하는 기록을 얻기 위해 선택과 그 가입, 각 그룹의 최대 위치를 결정하는 하위 쿼리를 사용해야합니다 "경도".

+0

일부 중요한 쿼리에서 더 적절할 수 있으므로 제 답변도보십시오. –

2
select MAX(position) position,latitude,longitute 
from meber 
group by latitude,longitute 
+1

이것은 'id'를 떨어 뜨립니다 - 아마도 OP가 무엇이 아니었을까요? – eggyal

+1

질문에서 'ID 열'이 어떻게 될지 명확하지 않으므로 생략했습니다. '1 ID를 선택, MAX (...'또한 올바른 해결책이 될 수도 있습니다.) – nosid

0

하위 쿼리 솔루션이 가장 일반적인 솔루션입니다. 가장 낮은 위치를 얻기 위해 대신 M.position> N.position를 작성하는 것만 큼 간단하다는

SELECT * 
FROM member M 
LEFT JOIN member N 
    ON M.latitude = N.latitude 
    AND M.longitute = N.longitute 
    AND M.position < N.position 
WHERE N.position IS NULL 

참고 :

나는 그것이 하위 쿼리를 포함하지 않기 때문에 사용하려면 다른있다.

관련 문제