2011-06-28 10 views
6

Czy istnieje skuteczny sposób na zamówienie przez i grupy przez, aby uzyskać konkretny element z każdej grupy (od zamówienia przez).Zamawianie z grupą przez

//This is the best way i have come up with. 
SELECT D.* 
FROM (
    SELECT * 
    FROM devices 
    ORDER BY time 
) AS D 
GROUP BY D.location 
+0

jest to bardziej efektywne niż 'select * from grupy urządzeń przez location'? – Jaydee

+0

Oto problem. Powiedzmy, że masz tabelę zawierającą kilka raportów. Każda lokalizacja może mieć raporty X. Ale chcesz tylko najnowszego raportu. Aby osiągnąć to 100% czasu, musisz zamówić według czasu THEN grupować według. – Michael

+0

Podejrzewam, że możesz nie rozumieć działania GROUP BY. Zobacz ten artykuł (przepraszam, jeśli to dla ciebie stara wiadomość) http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html – Jaydee

Odpowiedz

1
SELECT * 
FROM devices 
GROUP BY D.location 
ORDER BY time --ASC or DESC default is ASC i believe 

Nie potrzeba podrzędnych zapytaniami

+0

To pomyłka. Nie można wykonać zlecenia przez oświadczenie przed grupą za pomocą takiego oświadczenia. i tak, ASC jest domyślnie, ponieważ jest to "Naturalne zamówienie", ponieważ gdybym poprosił cię o sprawdzenie, czy mam 100 przedmiotów, prawdopodobnie zaczynałbyś od 1, a potem do 100, zamiast zaczynać od 100 i odliczać. – Michael

+0

@ Michael, zamieniłem to na – Neal

+0

Czy to wykonuje ORDER BY first lub GROUP BY? – Michael

2

ten pracował dla mnie

SELECT * 
FROM (SELECT * 
     FROM col 
     ORDER BY col DESC,date DESC)a 
GROUP BY col 
+0

Niestety tak dawno nie oglądałem tego, czego nie pamiętam! :) Ale dzięki za odpowiedź! – Michael

+0

LOL :) ... Wiem, ale ktoś inny może natknąć się na ten sam problem i nie zaszkodzi wstawić drugie rozwiązanie;) –