用于删除特定行的MySQL脚本

时间:2013-01-11 08:25:36

标签: 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    |       |
--------------------------------------------------

我想删除每个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 |
-------------

2 个答案:

答案 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的第二部分中获得下一个最大数字

此处DEMO ON SQLFIDDLE

答案 1 :(得分:0)

您可以为此编写一个程序::

首先获取A,

的所有唯一值
Select DISTINCT A from table

对此结果运行游标。

在光标内,

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