Avatar billede kec2 Nybegynder
21. oktober 2005 - 11:54 Der er 4 kommentarer og
1 løsning

Hjælp til SQL-sætning

Hej alle

Jeg har følgende tabeller

title = grandprix
grandprixid|dato|laps|note
grandprixid = primary key

title = race
raceid|driverid|teamid|carid|grandprixid|race_time|laps|fastest_lap|note
raceid = primary key
driverid, teamid, carid, grandprixid = foreign key

Der jeg gerne vil have fat i vinderene af de forskellig races.
Kravet til at være en vinder er en driver har max laps samtidig med race_time er så lille som mulig.

ex.

rid | did | teamid | cid |    r_time    | gpid | laps |  fast_lap
-----+-----+--------+-----+---------------+------+------+---------------
*174 | 609 |      3 |    | 01:28:12.0580 |  17 |  62 | 00:01:22.4910
179 | 544 |      8 |    | 01:28:13.94  |  17 |  62 | 00:01:22.81
176 |  99 |      3 |    | 01:28:14.3490 |  17 |  62 | 00:01:22.7750
175 | 610 |      1 |    | 01:28:20.8610 |  17 |  62 | 00:01:23.2650
185 | 212 |      8 |    | 01:28:21.4690 |  17 |  62 | 00:01:23.20
181 |  52 |      6 |    | 01:28:55.7470 |  17 |  62 | 00:01:23.8440
177 | 476 |      1 |    | 01:28:57.3290 |  17 |  62 | 00:01:22.9460
271 | 161 |    11 |    | 01:28:13.0710 |  17 |  61 | 00:01:23.9720
183 | 504 |      4 |    | 01:28:31.8070 |  17 |  61 | 00:01:25.1230
184 | 387 |      5 |    | 01:28:33.7150 |  17 |  61 | 00:01:25.3290
187 | 286 |      5 |    | 01:28:34.8090 |  17 |  61 | 00:01:24.8740

dvs linie med * er vinderen af det løb.

Jeg vil gerne have første og sidste dato ud, og antallet af datoer grupperet efter driverid.

Håbe at i kan hjælpe.
Avatar billede chrisp Nybegynder
21. oktober 2005 - 14:51 #1
Det her skulle virke hvis jeg har forstået dit problem rigtig.

Select * From Race  inner join
(Select raceid, min(race_time) as mintime From  Race inner join Grandprix on (Race.grandprixid = Grandprix.grandprixid and Race.laps = Grandprix.laps)
group by raceid) as besttimes
on besttimes.raceid = Race.raceid
where race_time = mintime


Det interesandte sker her:

Select raceid, min(race_time) as mintime From  Race inner join Grandprix on (Race.grandprixid = Grandprix.grandprixid and Race.laps = Grandprix.laps)
group by raceid

Hvor vi finder min. tiden for de biler der har kørt det rigtig antal omgange i hvert race.
Avatar billede kec2 Nybegynder
21. oktober 2005 - 19:37 #2
hej chrisp

Det giver mig desværre ikke helt det jeg gerne vil have.

Det store problem er at vindertiden ikke nødvendigvis er den mindste tid. Og dette er fordi at kører kan være udgået. Dvs vinderen er den køre med med den mindste tid blandt de kører som har kørt max omgange. Og dette skal så grupperes efter grandprixid. Grandprixid hvilke rækker der høre til det enkelte grandprix.

hilsen kec2
Avatar billede chrisp Nybegynder
22. oktober 2005 - 02:30 #3
Et par opklarende spørgsmål da jeg ikke er så god til motorsport :-|

A. Et grandprix består af flere løb ? (  mange raceid til et grandprix id ?)

B. Hvert løb i et grandprix består af det samme antal Laps (som er gemt i grandprix.laps ?)

C. Du ønsker at finde vinderen af grandprix og ikke vinderen af løb

D. For at vinde et grandprix skal man havde gennemført alle Laps i alle race og
  havde den samlet laveste tid ?

D. Kan du give nogle test data til race og grandprix ?

Mvh Chrisp
Avatar billede kec2 Nybegynder
22. oktober 2005 - 11:25 #4
Hej chrisp

A. Der er mangle rows i race som er knyttet til et grandprix. Hver enkelt af disse rows indeholde data om hvordan en kører klarede sig i det grandprix. Grandprix indeholde data om tid og sted for afholdes af grandprixet. Race indeholde data om hvordan hverenkelt kører klarede sig i det grandprix. Det kan sammenligenes med en CD som indeholder flere numre. CD=grandprix, nummer=race.

B. Grandprix.laps fortæller hvor mange omgange et grandprix er berammet til. Race.laps fortæller hvor mange omgange en kører har kørt i det grandprix. Det skal sige at vinderen af et grandprix ikke nødvendigvis har kørt den antal omgange grandprixet er berammet til. Dette kan skyldes flere ting. F.eks. at grandprixet bliver standset havlvejs pga. et meget stort masse uheld.

C. Vinderen af et grandprix er også vinderen af løbet.

D. Jeg har mærkeret vinderene med en *
Race tabellen er sorteret på følgende måde:
order by gpid, laps desc, r_time asc.

rid=174 har vundet grandprix 17 forbi. Han har i gpid=17 har kørt flerst omgange = 62. Det er han ikke ene om, der er 7, men her den af de 7 som har den laveste tid.

Dette samme gælder for rid=209.
rid=209 har vundet grandprix 18 forbi. Han har i gpid=18 har kørt flerst omgange = 65. Det er han ikke ene om, der er 4, men her den af de 4 som har den laveste tid.

E.

Grandprix
gpid |    date    | trackid | note |            gp            | laps
------+------------+---------+------+--------------------------+------
  17 | 2003-04-20 |      38 |      | grand prix of san marino |  62
  18 | 2003-05-04 |      72 |      | grand prix of spain      |  65

Race
rid | did | teamid | gpid |    r_time    | laps
-----+-----+--------+------+---------------+------
*174 | 609 |      3 |  17 | 01:28:12.0580 |  62*
179 | 544 |      8 |  17 | 01:28:13.94  |  62
176 |  99 |      3 |  17 | 01:28:14.3490 |  62
175 | 610 |      1 |  17 | 01:28:20.8610 |  62
185 | 212 |      8 |  17 | 01:28:21.4690 |  62
181 |  52 |      6 |  17 | 01:28:55.7470 |  62
177 | 476 |      1 |  17 | 01:28:57.3290 |  62
271 | 161 |    11 |  17 | 01:28:13.0710 |  61
183 | 504 |      4 |  17 | 01:28:31.8070 |  61
184 | 387 |      5 |  17 | 01:28:33.7150 |  61
187 | 286 |      5 |  17 | 01:28:34.8090 |  61
186 | 218 |      4 |  17 | 01:29:01.3430 |  61
189 | 368 |      6 |  17 | 01:29:13.2720 |  61
188 | 530 |    10 |  17 | 01:29:23.8410 |  60
190 | 273 |      9 |  17 | 01:23:03.8220 |  57
178 | 296 |    10 |  17 | 01:19:26.4420 |  54
192 | 270 |      9 |  17 | 01:15:04.9240 |  51
207 | 578 |      7 |  17 | 00:56:26.5910 |  38
191 | 308 |      7 |  17 | 00:34:26.93  |  23
180 | 580 |    11 |  17 | 00:27:47.7020 |  19
*209 | 609 |      3 |  18 | 01:33:46.9330 |  65*
246 |  52 |      6 |  18 | 01:33:52.6490 |  65
210 |  99 |      3 |  18 | 01:34:04.9340 |  65
305 | 476 |      1 |  18 | 01:34:48.9550 |  65
252 | 610 |      1 |  18 | 01:33:55.7910 |  64
309 | 218 |      4 |  18 | 01:33:56.15  |  64
308 | 296 |    10 |  18 | 01:34:02.9280 |  64
311 | 270 |      9 |  18 | 01:33:57.5930 |  63
249 | 161 |    11 |  18 | 01:34:09.9070 |  63
310 | 387 |      5 |  18 | 01:34:10.8220 |  63
314 | 308 |      7 |  18 | 01:34:57.0720 |  63
315 | 578 |      7 |  18 | 01:34:36.7730 |  62
313 | 273 |      9 |  18 | 01:06:06.0420 |  43
250 | 504 |      4 |  18 | 01:01:24.48  |  41
306 | 286 |      5 |  18 | 00:58:27.9950 |  38
304 | 212 |      8 |  18 | 00:28:03.9930 |  17
307 | 580 |    11 |  18 | 00:21:34.4540 |  12
165 | 368 |      6 |  18 | 23:59:59      |    0
  29 | 544 |      8 |  18 | 23:59:59      |    0
166 | 530 |    10 |  18 | 23:59:59      |    0

Hilsen kec2
Avatar billede kec2 Nybegynder
18. august 2010 - 12:53 #5
Ikke alting kan laves i en query. Dette problem skal løses via flere sql querys og noget programmeringskode.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester