2012-07-31 12 views
6

MAX(ID), MIN(ID) MYSQL क्वेरी से अधिक कॉलम कैसे प्राप्त करें? इस क्वेरी से MAX(ID) & MIN(ID):MAX (आईडी), MIN (आईडी) MYSQL क्वेरी से अधिक जानकारी प्राप्त करें?

वर्तमान में मैं केवल दो मूल्यों को प्राप्त

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

इस-छद्म क्वेरी की तरह कुछ पाने के लिए की आवश्यकता है कॉलम 'श्रृंखला' जो 'सफेद' के बराबर होती है।

आईडी = न्यूनतम (आईडी) के लिए कॉलम 1 और कॉलम 2 के साथ 1। आईडी = मैक्स (आईडी) के लिए कॉलम 1 और कॉलम 2 के साथ दूसरा।

लेकिन कैसे?

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

यह काम करता है लेकिन 1:39 मिनट लगते हैं। डेटा की एक +5000 पंक्तियों के लिए ... क्या यह सामान्य है? – Ash501

+1

@ Ash501: यह बिल्कुल सामान्य नहीं है। क्या आप इंडेक्स जोड़ना भूल गए? मैंने इंडेक्स सुझाव शामिल करने के लिए अपना जवाब अपडेट कर लिया है। लेकिन 5000 पंक्तियों के साथ मुझे लगता है कि यह उससे कहीं अधिक तेज होना चाहिए * सूचकांक के बिना भी *। क्या आपका डेटाबेस सर्वर कम या कम लोड के तहत है। क्या आप यह उल्लेख करने के लिए अपना प्रश्न अपडेट कर सकते हैं कि प्रदर्शन एक मुद्दा है और 'शो बनाएं तालिका ...' का उत्पादन और 'EXPLAIN SELECT' का परिणाम शामिल है? –

+1

@ Ash501, ऐसा इसलिए है क्योंकि subqueries धीमे हैं क्योंकि 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

एक अधिक आसान समाधान:

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) 
संबंधित मुद्दे