1

我有一个这样的 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 |
-------------
4

2 回答 2

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

这里是 SQLFIDDLE 上的演示

于 2013-01-11T13:12:23.953 回答
0

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

首先得到A的所有唯一值,

Select DISTINCT A from table

在此结果上运行光标。

在光标内部,

Select * from table where A=$$cursorvalue order by C desc limit 2
于 2013-01-11T09:07:02.610 回答