maciejmt napisał(a)
Cos w ten desen nie daje poprawnych wynikow..
SELECT `A`,`D` FROM table WHERE C='A' GROUP BY A HAVING MAX(B)
to w ogóle powinno sypnąć błędem
Po pierwsze wszystkie kolumny ze zwracanych wartości powinny być po group by-żelazna zasada, po group by dajesz to co w select, oprócz funkcji agregujących(max, min, count, sum, avg itp)
czyli:
SELECT `A`,`D` FROM table WHERE C='A' GROUP BY A, D
Po drugie w having dajesz warunki(warunek, czyli coś musi się równać, być większe, mniejsze) po grupowaniu i tu select jak Marcin wyżej pisał zamiast tego max(B), plus porównanie:
SELECT `A`,`D` FROM table WHERE C='A' GROUP BY A, D
HAVING B=(SELECT Max(B) FROM table WHERE C='A')
tylko weź pod uwagę, że jeśli w 'A' i 'D' będziesz miał takie same wartości dla wielu rekordów w tabeli z 'B' spłniającym warunki to moje zapytanie zwróci jeden rekord-tylko unikalne wartości 'A' i 'D'
generalnie jeżeli nie chcesz grupować użyj zapytania Marcina, a jeśli chcesz grupować rekordy użyj mojego