2013-01-11 35 views
1

的MySQL腳本我有一個MySQL表是這樣的:用於刪除特定的行

-------------------------------------------------- 
| Field | Type | Null | Key | Default | Extra | 
-------------------------------------------------- 
| A  | int(11) | NO | PRI | NULL |  | 
-------------------------------------------------- 
| B  | int(11) | NO | PRI | NULL |  | 
-------------------------------------------------- 
| C  | int(11) | NO |  | NULL |  | 
-------------------------------------------------- 

我想刪除各設置值,其中C值是不是在排名前10位(最大值)C值的所有行特定A.所以就留在第10個值,第二A 10個值,10個值第三...

謝謝

下面是一個例子:

------------- 
| A | B | C | 
------------- 
| 1 | 2 | 5 | 
------------- 
| 1 | 3 | 2 | 
------------- 
| 1 | 5 | 9 | 
------------- 
| 1 | 4 | 7 | 
------------- 
| 1 | 8 | 4 | 
------------- 
| 2 | 1 | 5 | 
------------- 
| 2 | 3 | 8 | 
------------- 
| 2 | 5 | 7 | 
------------- 
| 2 | 4 | 6 | 
------------- 
| 2 | 7 | 9 | 
------------- 
| 2 | 8 | 1 | 
------------- 

而且我們說,我只想要頂部2,而不是前10名。那麼結果:

------------- 
| A | B | C | 
------------- 
| 1 | 5 | 9 | 
------------- 
| 1 | 4 | 7 | 
------------- 
| 2 | 7 | 9 | 
------------- 
| 2 | 3 | 8 | 
------------- 
+2

無法理解你想做的事......對不起 –

+0

我不能相信你怎麼想。給例如什麼,什麼ü嘗試。 –

+0

我寫了一個例子。對不起,如果不明確。我可以用一個光標來做,但是對於數百萬行來說是很慢的。 – recis

回答

0

你可以寫這個::過程

首先獲取的所有唯一值,

Select DISTINCT A from table 

對此結果運行遊標。

光標內部,

Select * from table where A=$$cursorvalue order by C desc limit 2 
+0

是的,我可以做到這一點,但對於數百萬(甚至數十億)行來說,它會非常緩慢。這就是爲什麼我想要一個簡單的「DELETE FROM ... WHERE ...」腳本。 – recis

1

可以最大和類似

SELECT A,B,t1.C from table1 t1 
    INNER JOIN (select max(C) max1 from table1) t2 
    ON t1.C= t2.max1 

    UNION 

    SELECT A,B,MAX(C) MAX1 from table1 t3 
    INNER JOIN (select MAX(C) MAX2 from table1) t4 
    WHERE t3.c < t4.max2 
    GROUP BY A 

    ORDER BY A 

下最大值和輸出之間使用union就是這樣

觀測數據:它只是一個嘗試,一個提示和一個解決方法,如果你接受它,你可以通過你自己修復它。我沒有得到正確的數字B我不知道爲什麼。其在聯盟的第二部分,其中獲得下最大的數字

這裏DEMO ON SQLFIDDLE