Sziasztok egy olyan problémám van,hogy adott egy excel tábla regeteg rekorddal ami folyamatosan bővül ezt a táblát beimportálom accesbe amiből a következő mezőket használom:
-helyezés,
-név,
-szül idő,
-klub,
-elért időeredmény,
-hely,
-dátum,
-korcsoport,
-versenyszám
Egy olyan lekérdezést kellene csinálnom,hogy korcsoportonként (ezt én adom meg lásd having) és versenyszámonként ,az elért időeredmények alpján nővekvő sorrendben a tíz versenyző("legjobb") csak a legjobb eredményével szerepeljen a listán!Illetve a másik lekerdezés az egész évben elért legjobb 20 eredmény legyen rajta korcsoportonként.
Az elsőre csináltam egy lekérdezést (lásd alábbiakban),de ez csak korcsoportonként és verseny számonként irja ki mindekinek az eredményét növekvő sorrendben!Igy előfordul,hogy u.az a versenyző 10 legjobb eredménye kerül csak fel a tízes listára.
SELECT [Tábla].[Név], [Tábla].[Szül-idő], [Tábla].[Klub], [Tábla].[Elért Idő], [Tábla].[Hely], [Tábla].[Dátum], [Tábla].[Csúcs], [Tábla].[Szám]
FROM Tábla
GROUP BY [Tábla].[Név], [Tábla].[Szül-idő], [Tábla].[Klub], [Tábla].[Idő], [Tábla].[Hely], [Tábla].[Dátum], [Tábla].[Csúcs], [Tábla].[Szám]
HAVING (((Tábla.[Szül-idő]) Between 1977 And 1981))
ORDER BY [Tábla].[Szám], [Tábla].[Idő];
Tudnátok erre egy jó megoldást vagy ötletet adni???
Minden megoldás érdekel!
Előre is köszi.
- 1983 megtekintés
Hozzászólások
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.
- A hozzászóláshoz be kell jelentkezni
Privátban esetleg küldhetnék példát,mert nem olyan egyszerű!
Én csak az excel filet kapom meg amiből ki kell szűrnöm az infokat ami több ezer rekordból áll!Nem én viszem fel az adatokat csak importálom az excel táblából!
- A hozzászóláshoz be kell jelentkezni