Pomoc przy zapytaniu

0

Mysle i mysle i wymyslec nie moge. Moze pozna pora :-P

A | B | C | D
1 15 A
1 33 A
1 12 A
1 35 B
2 5 A
3 7 A
4 2 A

Cos w ten desen nie daje poprawnych wynikow..

SELECT `A`,`D` FROM table WHERE C='A' GROUP BY A HAVING MAX(B)

Chodzi o to zeby wyciagnac rekordy ktore maja 'A' w kolumnie C, o najwiekszym ID w kolumnie B.
Z podzapytaniem skorelowanym cos nie wyszlo, wiec jakis blad robie.

0

SELECT * FROM table WHERE C='A' AND B IN (SELECT Max(B) FROM table WHERE C='A')

pozdrawiaMM

0
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

0

@Marcin - zwraca wynik
@void-tec - sie nie interpretuje :-P

Chyba zle napisalem.. Chce osiagnac taki wynik...

A | B | C | D
1 33 A
2 5 A
3 7 A
4 2 A

Dla kazdego C='A', kazde unikalne A o najwiekszym B spelniajace C. Czy jakos tak :D Widac o co chodzi..

0

U mnie w oraclu działało, tylko bez ciapek.

Twoje rozwiązanie:

select A,max(B) as B,C,D from TABLE WHERE C='A' 
group BY
A,C,D

Albo :

SELECT * FROM table t WHERE t.C='A' AND t.B IN (SELECT Max(B) FROM table t1 WHERE C='A' and t1.A=t.A)
0

No tak, drugie zapytanie jest poprawne.
Generalnie u mnie zapytanie jest 'troche' bardziej rozbudowane, myslalem ze bedzie sie dalo zapisac to jakos prosciej, bo trzeba w podzapytaniu wszystkie warunki powtorzyci z glownego zapytania. Ale OK ;-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1