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    |       |
--------------------------------------------------

C 値がその特定の A の上位 10 (最大) C 値に含まれていない各 A 値のすべての行を削除したいので、最初の A には 10 個の値、2 番目の A には 10 個の値、10 個の値が残ります。 3番目に...

ありがとうございました

次に例を示します。

-------------
| 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 |
-------------

そして、トップ 10 ではなく、トップ 2 のみが必要だとします。結果は次のようになります。

-------------
| 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の2番目の部分にあります

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 に答える