2013-01-17 38 views
8

यह एक उत्पाद तालिका है और इसमें कुछ मिलियन रिकॉर्ड हैं।

enter image description hereचयन समूह प्रत्येक समूह से 1 पंक्ति

मैं नीचे के रूप में रिकॉर्ड सूचीबद्ध करना चाहते हैं:
आम तौर पर मैं का उपयोग करें:

SELECT id, 
     product_name, 
     store_id 
FROM product 
GROUP BY store_id 
ORDER BY id. 


वर्तमान में होने एसक्यूएल प्रदर्शन मुद्दा। मुझे इस तरह के आउटपुट परिणाम के लिए SQL क्वेरी की आवश्यकता है।

enter image description here

+0

प्रश्न के भाग के रूप में तालिका संरचनाओं और व्याख्या विवरण के आउटपुट को पोस्ट करें ताकि हम देख सकें कि क्वेरी क्यों धीमी है। तालिका परिभाषा में अनुक्रमणिका शामिल करना सुनिश्चित करें। – Namphibian

+0

"उत्पाद से" प्रश्न में आपकी तालिका का नाम उल्लेख करें –

उत्तर

18

इस हल करने के लिए कई विकल्प हैं, जिनमें मेरा सुझाव है एक सबक्वेरी जो अलग हो जाता है नवीनतम ID (यह सोचते हैं कि स्तंभ AUTO_INCREMENT एड है) प्रत्येक store_ID के लिए शामिल हो गए हैं करने के लिए है। ID और store_id:

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT store_ID, MAX(ID) max_ID 
      FROM tableName 
      GROUP BY store_ID 
     ) b ON a.store_ID = b.store_ID AND 
       a.ID = b.max_ID 

बेहतर प्रदर्शन के लिए इन स्तंभों पर एक सूचकांक है सुनिश्चित करें।

UPDATE 1

यदि आप हर रिकॉर्ड के लिए सीमा होती है करना चाहते हैं, यह नीचे का उपयोग करें,

SELECT ID, product_Name, store_ID 
FROM tableName a 
WHERE 
    (
    SELECT COUNT(*) 
    FROM tableName b 
    WHERE b.store_ID = a.store_ID AND b.ID >= a.ID 
) <= 2; 
+0

अच्छा। यही काम है! क्या मैं प्रत्येक store_id से 2 रिकॉर्ड सीमित कर सकता हूं? –

+0

ग्रेट। लेकिन क्या मैं आईडी डीईएससी को सॉर्ट कर सकता हूं? –

+0

सुनिश्चित करें, इस लिंक को देखें, http://www.sqlfiddle.com/#!2/ba920/12 –

1

इस कृपया का प्रयास करें:

SELECT * FROM YOURTABLE B 
JOIN (SELECT MAX(ID) MX FROM YOURTABLE GROUP BY STORE_ID) A 
ON A.STORE_ID = B.STORE_ID 
AND B.ID = A.MX 
GROUP BY B.STORE_ID 
; 
2
SELECT store_id,id,product_name FROM table_name 
WHERE id IN (SELECT MAX(id) FROM table_name GROUP BY store_id) 
ORDER BY id 

यह काम करना चाहिए और आप स्टोर_आईडी या आईडी द्वारा अपने रिक के अनुसार ऑर्डर कर सकते हैं।

+0

@ जे-डब्ल्यू: यह स्वीकृत उत्तर (वाक्यविन्यास के अलावा) से अलग कैसे है? ऐसा लगता है कि परिणाम दोनों मामलों में सही हैं। – Priednis