2012-07-31 7 views
6

MAX(ID), MIN(ID) MYSQL 쿼리에서 더 많은 열을 얻는 방법?MAX (ID), MIN (ID) MYSQL 쿼리에서 더 많은 정보를 얻으시겠습니까?

현재 나는 두 개의 값을 얻을 : MAX(ID) & MIN(ID)이 쿼리에서 :

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

그것은 2 개 행을 반환해야합니다

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

이-의사 쿼리 같은 것을 얻기 위해 필요 '흰색'과 같은 열 '계열'

ID = Min (ID)의 경우 첫 번째 열과 두 번째 열이 있습니다. ID = Max (ID)의 경우 column1 및 column2로 두 번째입니다.

하지만 어떻게?

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)에 결합 된 인덱스를 추가 좋은 성능을 위해 :

답변

6

여기 UNION를 사용하여 접근이다. 더 나은 성능을 가질 수있다

또는 다른 변형은 :

(
    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은 각 행에 대해 하위 쿼리를 실행해야하므로 하위 쿼리가 느리기 때문입니다. 그의 두 번째 솔루션은 올바른 색인을 설정했다면 더 빠를 것입니다. –

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) 
관련 문제