Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: maksymalna wartosc w kolumnie
Forum PHP.pl > Forum > Bazy danych > MySQL
kanan
W jaki sposob z bazy mozna wybrac tylko te rekordy, ktorych wartosc w jednej kolumnie jest maksymalna, a wiec np.

10 imie1 nazwisko1
10 imie2 nazwisko 2
9 imie3 nazwisko 3
10 imie4 naziwsko 4
8 imie5 nazwisko5
7 i6 n6
6 i7 n7
5 i8 n8

itd. by w wyniku tego otrzymac imie1, nazwisko1, imie2, nazwisko2, imie3 nazwisko3.

Problem polega w tym, ze nie wiem w jaki sposob zdefiniowac to maksimum,gdyz nie jest wiadome, ile wynosi ta wartosc, a wiec zawsze trzeba sprawdzic to maksimum.
nospor
  1. SELECT *
  2. FROM tabela WHERE a=max(a)
kanan
No wlasnie nie... probowalem zanim napisalem w ten sposob, bo przeciez to jest oczywiste skojarzenie, ale niestety nie dziala.

Otrzymuje odpowiedz:

SELECT *
FROM archiwum
WHERE numer = max( numer )
LIMIT 0 , 30

Na to zapytanie nastepujaca:

#1111 - Invalid use of group function

Wydaje mi sie, ze max jest funkcja systemowa, ale jak widac nie... istnieje jakas inna wbudowana funkcja?
Darti
  1. SELECT *
  2. FROM archiwum ORDER BY numer DESC LIMIT 1
kanan
Powyzszy zwraca pierwszy wiersz i to faktycznie ma maksymalna wartosc, natomiast ja bym chcial wyswietlic wszystkie, ktore posiadaja maksymalna wartosc, czyli jesli sa 3 wiersze, ktore maja wartosc maksymalna w tej kolumnie to powinien je wyswietlic.

Jak wiec mozna tego dokonac?

Pozdrawiam
Darti
  1. SELECT *
  2. FROM archiwum WHERE numer = (SELECT max(numer)
  3. FROM archiwum)
kanan
Niestety nie sad.gif

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT max(numer) FROM archiwum)' at line 1

Help!
Darti
u mnie działa w taki sposób bez problemu - mam wersje MySQL 4.1.7
kanan
Moja wersja to MySQL 4.0.15 . Czy umialby ktos zaproponowac uniwersalne rozwiazanie, ktore bedzie chodzi i pod ta wersja?
popbart
http://forum.php.pl/index.php?showtopic=25861
Kurcze, temat powraca co jakiś czas. Tak trudno poszukać ?
kanan
Tak tylko mi nie chodzi o zwrocenie jednego wiersza. Ja chce wszystkie rekordy, ktore w danej kolumnie maja maksymalna wartosc.
popbart
MAM!!!
  1. SELECT t1.*
  2. FROM tabela AS t1 LEFT JOIN tabela AS t2
  3. ON(t1.pole<t2.pole)
  4. WHERE t2.id IS NULL;

cool.gif
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.