2011-01-05 22 views
0

最終,我試圖刪除重複的行,並保留與更大的數字數據的行。因此,要找到重複的數據,我會用:MySQL:如何找出哪一行具有更大的值?

SELECT * FROM tbl GROUP BY a HAVING COUNT(a)>1

現在,我如何才能找到在field_a列中的大量的行?

+0

你有沒有試過MAX() - > http://www.tizag.com/mysqlTutorial/mysqlmax.php – Christophe 2011-01-05 08:31:39

+0

這可以幫助我隔離MAX,但我需要刪除除MAX以外的所有內容。我怎樣才能做到這一點? – Strawberry 2011-01-05 08:56:39

+0

DELETE FROM tbl WHERE MAX(a)<> 1(<>表示不是,所以a的最大值不是1)但是在運行該查詢之前先用select進行測試 – Christophe 2011-01-05 09:22:02

回答

0

也許(排序一種逃避的):

DELETE t 
FROM t 
EXCEPT (max-query-on-t) 

而且考慮當記錄具有相同的最大值。

0
delete tbl from tbl, 
(
    select a, max(field_a) as max_a 
    from tbl 
    group by a 
    having count(a)>1 
) as max_for_a 
where tbl.a=max_for_a.a and tbl.field_a!=max_for_a.max_a; 

,如果你有field_a爲每一個兩個或更多更大的價值,就無法刪除所有

來解決這個問題,你需要運行像

select a, count(*) from tbl group by a; 
另一個查詢

,併爲每一個

delete from tbl where a=? limit (total_count-1); 
0

要做到這一切在一個查詢中,你需要一個唯一的密鑰,你必須存儲臨時表中的中間結果:

delete from tbl where tbl.id in (select result.id from (select tbl.id from tbl join (select max(a) as a from tbl) as maxa where tbl.a<>maxa.a) as result) 

雖然,我會建議將它分成兩個或三個單獨的查詢。

相關問題