Wenn bereits eine MySQL Version >= 4.1 verwendet wird, dann ist es simpel mit einem Subquery lösbar.
Gegeben ist folgendes:
select * from test order by prdnr, preis; +-------+-------+-------+ | prdnr | bez | preis | +-------+-------+-------+ | 1 | Bla | 5.99 | | 1 | Bla | 6.19 | | 1 | Bla | 6.49 | | 2 | Blubb | 12.29 | | 2 | Blubb | 12.45 | | 2 | Blubb | 12.99 | | 3 | Laber | 10.99 | +-------+-------+-------+ |
Jetzt möchte man nur die Datensätze mit dem maximalen Preis pro prdnr und bez.
In MySQL >= 4.1 funktioniert folgendes:
select test.prdnr, test.bez, test.preis from test where test.preis = (select max(t2.preis) from test t2 where t2.prdnr = test.prdnr and t2.bez = test.bez) order by bez; |
In MySQL Versionen vor 4.1 kann man das mit einem self-join lösen:
select test.prdnr, test.bez, test.preis from test left join test t2 on (t2.prdnr = test.prdnr and t2.bez = test.bez and t2.preis > test.preis) where t2.preis is null order by bez; |
Wenn man allerdings mehr als 1 Datensatz mit identischem maximalem Preis (um beim Beispiel zu bleiben) mit gleicher prdnr hat, dann hat man wieder ein Problem. Dazu ist mir leider noch keine brauchbare Lösung eingefallen.