2012-07-31 7 views
6

MAX(ID), MIN(ID)より多くの列を取得する方法MYSQLクエリ?MAX(ID)、MIN(ID)MYSQLクエリからより多くの情報を入手できますか?

現在、私は2つだけの値を取得します:MAX(ID) & MIN(ID)このクエリから:

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行を返す必要があります列 'series'は 'white'に等しくなります。

ID = Min(ID)の列1と列2で1番目。 ID = Max(ID)の列1と列2の2番目の列。

どのようにですか?ここで

答えて

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)に組み合わせたインデックスを使用することができます。

+0

。データの+ 5000行のために...それは普通ですか? – Ash501

+1

@ Ash501:それは絶対に正常ではありません。インデックスを追加するのを忘れましたか?私はインデックスの提案を含めるように私の答えを更新しました。しかし、5000行では、索引がなくても*それよりもはるかに速くなるはずです*。データベースサーバーに負荷がかかっていないか、負荷が重いですか。パフォーマンスが問題であり、 'SHOW CREATE TABLE ... 'の出力と' EXPLAIN SELECT'の結果を含めるように質問を更新できますか? –

+1

@ Ash501というのは、サブクエリはMySQLが各行に対して実行する必要があるためです。正確なインデックスが設定されていれば、彼の2番目の解決策は速くなるはずです。 –

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; 

選択はあなただけ別のテーブルのように使用することができ、内側の選択です。

2

簡単な解決策:これは動作しますが、1時39分を要し

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) 
関連する問題