2012-06-07 74 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電流。

然而,這將導致

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

我想顯示出最高的位置,而不是使用由所述組中的最低位置的結果。任何解決方案

回答

4

你必須使用一個子查詢來確定每個組的最大位置,然後再加入與你的選擇,以獲得所需的記錄:

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

順便說一下,英文單詞拼寫「經度」。

+0

請看看我的答案,因爲它可能更適合於某些性能嚴重的查詢。 –

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

這會丟棄'id' - 可能不是OP後的內容? – eggyal

+1

從這個問題中不清楚「ID」列會發生什麼 - 所以我省略了它。 'select 1 ID,MAX(...'也可能是一個正確的解決方案。 – nosid

0

子查詢解決方案是最常見的解決方案。

還有一個我喜歡用,因爲它不涉及子查詢:

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 

注意的是,爲了獲得最低位置時,它就像撰寫M.position> N.position不是那麼簡單。