Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GROUP BY, ORDER BY
Forum PHP.pl > Forum > Bazy danych > MySQL
pracus
Mam dwie tabele, które łączę w zapytaniu LEFT JOINem.

Pierwsza [records] zawiera: id, name, value.
Druga [records_values] zawiera: id, value, condition.

Chcę wyciągnąć rekordy z unikalnymi id spełniające warunek i o najwyższej wartości condition.

Powiedzmy, że tabele wypełnione są tak:

[records]
id | name | value
1 | ABC | 3
2 | DEF | 5
3 | GHI | 0

[records_values]
id | condition | value
1 | 8 | 0
1 | 10 | 1
1 | 20 | 3
2 | 5 | 0
2 | 10 | 5
3 | 0 | 0

Chcę odpytać o unikalne rekordy, w których condition jest mniejsze od 15, ale maksymalne w swojej grupie, czyli:
id | name | value
1 | ABC | 1
2 | DEF | 5
3 | GHI | 0

Próbowałem przez:

SELECT r.id, r.name, rv.value FROM records r LEFT JOIN records_values rv USING (id) WHERE rv.condition < 15 GROUP BY r.id ORDER BY rv.condition DESC

Niestety ORDER BY jest ignorowane lub nie działa tak jak przewidywałem.
Jakies pomysły?

Zadanie "na szóstkę": wynik całości ma być sortowany po id smile.gif

Z góry dziękuję!

Czy można w ogóle sortować wewnątrz grupy?
mrok
tak pisane z palca, wiec nie jestem pewien czy na 100% Ci zadziala
  1.  
  2. SELECT R.id, R.name, max(RV.value) AS value
  3. FROM records R
  4. JOIN record_values RV ON R.id = RV.id
  5. WHERE RV.condit < 15
  6. GROUP BY R.id
  7. ORDER BY R.Id;
  8.  
  9.  
pracus
Dzięki! Zaraz sprawdzę.
Tylko już widzę błąd - to condition ma być maksymalne (ale spełniające warunek), a nie value.

Niestety nie działa :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.