我有一个像这样的MySQL表:
--------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
| A | int(11) | NO | PRI | NULL | |
--------------------------------------------------
| B | int(11) | NO | PRI | NULL | |
--------------------------------------------------
| C | int(11) | NO | | NULL | |
--------------------------------------------------
我想删除每个A值的所有行,其中C值不在特定A的前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 |
-------------
答案 0 :(得分: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
,输出就像那样
Obs:如果你接受它,它只是一个尝试,一个提示和一个解决方法,你可以自己解决它。我没有得到正确数量B
我不知道为什么。它在UNION的第二部分中获得下一个最大数字
答案 1 :(得分:0)
您可以为此编写一个程序::
首先获取A,
的所有唯一值Select DISTINCT A from table
对此结果运行游标。
在光标内,
Select * from table where A=$$cursorvalue order by C desc limit 2