7

MAX(ID), MIN(ID)MYSQL クエリからより多くの列を取得するには?

MAX(ID) & MIN(ID)現在、次のクエリから2 つの値のみを取得します。

SELECT MIN(ID), MAX(ID) FROM mytable WHERE mytable.series = 'white' ;

この擬似クエリのようなものを取得する必要があります:

SELECT  column1, column2
FROM    mytable 
WHERE   series = 'white'
AND ID=Max(ID)
'AND GET ME ALSO'
WHERE   series = 'white'
AND ID=Min(ID);`

「白」に等しい列「シリーズ」の2行を返す必要があります。

1 つ目は、ID=Min(ID) の column1 と column2 です。2 番目は、ID=Max(ID) の column1 と column2 です。

しかし、どのように?

4

3 に答える 3

6

を使用したアプローチは次のUNIONとおりです。

SELECT column1, column2
FROM mytable
WHERE series = 'white' AND ID IN
(    
    SELECT MIN(ID) FROM mytable WHERE series = 'white'
    UNION
    SELECT MAX(ID) FROM mytable WHERE series = 'white'
)

パフォーマンスを向上させるには、 に複合インデックスを追加し(series, id)ます。

または、パフォーマンスが向上する可能性のある別のバリ​​エーション:

(
    SELECT column1, column2
    FROM mytable
    WHERE series = 'white'
    ORDER BY ID
    LIMIT 1
)
UNION
(
    SELECT column1, column2
    FROM mytable
    WHERE series = 'white'
    ORDER BY ID DESC
    LIMIT 1
)

これにより、 で複合インデックスを使用することもできます(series, id)

于 2012-07-31T17:10:13.207 に答える
4

より簡単な解決策:

SELECT a.column1, a.column2
FROM   mytable a
JOIN   (
       SELECT MIN(ID) AS minid, MAX(ID) AS maxid
       FROM   mytable
       WHERE  series = 'white'
       ) b ON a.ID IN (b.minid, b.maxid)
于 2012-07-31T17:16:01.460 に答える
0

まさにあなたの言う通りです:

SELECT
  column1, column2
FROM 
  mytable as m, 
  (SELECT MIN(ID) as mid, MAX(ID) as xid 
   FROM mytable WHERE mytable.series = 'white'
   ) t
WHERE 
  m.ID = t.mid or m.ID = t.xid;

括弧内の選択は、別のテーブルと同じように使用できる内部選択です。

于 2012-07-31T17:12:13.120 に答える