0

この構造のテーブルがあります:

id int
min int
max int

昇順に並べ替えて、最初の行の最大値と 2 番目の行の最小値を選択します。

だから私はこのクエリを実行し、必要な値を取得する前に:

select min, max
from mytable
order by min asc
limit 2;

また、私はこれを試しました:

select cm_max
from mytable
order by cm_min
limit 1
union
select cm_min
from mytable
order by cm_min
limit 1,1;

しかし、機能しません...使用するフィールドのみを選択する方法はありますか?

4

2 に答える 2

1

値を1行で返したい場合は、次のことができます

SELECT MIN(CASE WHEN rnum = 1 THEN cm_max END) cm_max,
       MIN(CASE WHEN rnum = 2 THEN cm_min END) cm_min
  FROM
(
  SELECT id, cm_min, cm_max, @n := @n + 1 rnum
    FROM medidas, (SELECT @n := 0) n
   ORDER BY cm_min
   LIMIT 2
) q

注文条件で 2 つのレコードを取得し、内部選択の各行に行番号を割り当てます。CASE次に、外側の選択で、行番号を使用してその値をピボットします。

また

SELECT q1.cm_max, q2.cm_min
  FROM
(
  SELECT id, cm_min, cm_max
    FROM medidas
   ORDER BY cm_min
   LIMIT 1
) q1 CROSS JOIN
(
  SELECT id, cm_min, cm_max
    FROM medidas
   ORDER BY cm_min
   LIMIT 1, 1
) q2 

このクエリでは、サブクエリで対象の 2 つのレコードを取得し、2 つのレコードCROSS JOINを結合して必要な値を出力するために使用します。

これは両方のクエリのSQLFiddleデモです

于 2013-07-17T23:33:36.980 に答える