2013-01-17 14 views
8

To jest tabela produktów i kilka milionów rekordów.

enter image description hereWYBIERZ zapytanie o zwrot 1 wiersz z każdej grupy

Chcę rekord listy poniżej:
Normalnie używam:

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


Obecnie mający problem z wydajnością SQL. Potrzebuję kwerendy SQL do wyniku wyjściowego w ten sposób.

enter image description here

+0

Proszę umieścić struktury tabel i dane wyjściowe instrukcji wyjaśniania jako część pytania, abyśmy mogli zobaczyć, dlaczego zapytanie jest tak wolne. Upewnij się, że indeksy są zawarte w definicji tabeli. – Namphibian

+0

wymień nazwę tabeli w zapytaniu "z produktu" –

Odpowiedz

18

Istnieje wiele alternatyw do rozwiązuje ten jeden, który polecam jest dołączyło podkwerenda które oddzielnie pobiera najnowszą ID (zakładając, że kolumna jest AUTO_INCREMENT ed) dla każdego 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 

dla lepszej wydajności, należy mieć indeks na tych kolumnach: ID i store_id.

UPDATE 1

jeśli chcesz mieć limit dla każdego rekordy, użyj tego poniżej,

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

Dobrze. To jest praca! Czy mogę ograniczyć 2 rekordy z każdego id store_id? –

+0

Świetnie. Ale czy mogę posortować ID DESC? –

+0

na pewno, spójrz na ten link, http://www.sqlfiddle.com/#!2/ba920/12 –

1

Spróbuj to proszę:

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 

to powinno zadziałać i można składać zamówienia zgodnie z wymaganiami albo przez id_produktu, albo id.

+0

@ J-W: Czym różni się to od zaakceptowanej odpowiedzi (poza składnią)? Wygląda na to, że wyniki są poprawne w obu przypadkach. – Priednis

Powiązane problemy