Witam,
szukając w dokumentacji mysqla odpowiedzi na moje pytanie
trafiłem na taki przykład:
SELECT user, MAX(salary) as max_sel
FROM tmp
GROUP BY user HAVING max_sel = MAX(salary);
I faktycznie w tabeli, która na 2 kolumny wszystko działa dobrze
ale ja potrzebuję czegoś więcej :-)
CREATE TABLE `tmp` (
`id` int(11) NOT NULL auto_increment,
`user` char(50) default NULL,
`salary` int(10) default NULL,
`data` date default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM
wprowadziłem do niej takie dane:
INSERT INTO `tmp` VALUES
(1,'mikolaj',50,'2006-01-01'),
(2,'mikolaj',15,'2004-02-02'),
(3,'mikolaj',20,'2004-03-03'),
(4,'mikolaj3',11,'2004-04-04'),
(5,'mikolaj3',40,'2005-05-05'),
(6,'mikolaj3',25,'2005-05-05');
Po dodaniu do selecta pola `data`
SELECT user, MAX(salary) as max_sel, `data`
FROM tmp
GROUP BY user HAVING max_sel = MAX(salary);
Otrzymuję taki wynik:
user salary data
mikolaj 50 2006-01-01
mikolaj3 40 2004-04-04
1 rekord jest ok (przez przypadek)
a drugi !!! pokazuje pierwszą datę z pogrupowanej grupy,
zamiast wartość `data` z rekordu gdzie jest MAX(salary).
Czy ktoś mógłby mnie oświecić dlaczego tak
się dzieje?
Niestaty nie można dodać po prostu
order by `data`, bo order jest wykonany po group :(
Jak wybrać dobre rekordy bez użycia tabel tymczasowych?
Czy kroś może mi pomóc?
Mysql 4.costam (bez podzapytan).
Mikolajj