Talán nem ártana a normálformákat betartani, azaz pl.: ismétlődő adatot nem tárolunk, csak hivatkozást rá (1NF), ill. redundáns adatot sem (3NF, jelen helyzetben ui. az időeredményből a helyezés következik)
Ezek szerint legyen inkább:
- egy VERSENYZO táblád, amiben a név és a szül. idő van (+ id mint elsődleges kulcs)
- egy VERSENY táblád, amiben a helyszín és a dátum van (+ id mint elsődleges kulcs)
- egy EREDMENY táblád, amiben a versenyzo_id, a korcsoport, a versenyszám, a verseny_id és az idoeredmeny van
Aztán ebből az egyes versenyzők legjobb eredményei pl.:
select versenyzo_id, korcsoport, versenyszam, min(idoeredmeny) as min_ido
from EREDMENY group by (versenyzo_id, korcsoport, versenyszam)
order by min_ido;
Törpöltem. Ocsmány, de jobb nem jutott eszembe:
select korcsoport, versenyszam, idoeredmeny
from EREDMENY q
where idoeredmeny in (select idoeredmeny from EREDMENY where korcsoport=q.korcsoport and versenyszam=q.versenyszam order by idoeredmeny limit 20);
Ha nincs mindhárom említett mező szerint indexelve a tábla, akkor ez N^2 lépésidejű lesz, ergo keresztre/félholdra/dávidcsillagra feszítés jár érte alsó hangon, de egyelőre nem tudok jobbat.