webForumDet fria alternativet
Logga in / Bli medlem

Mycket krånglig SQL ...... 3 tabeller .....

Databaser & SQL

6 svar · 213 visningar · startad av PatrikB

Medlem sedan mars 20002 836 inlägg
Frågan#1

Hello,

skulle behöva ha lite hjälp.
Har kört fast totalt o kommer ingenstans.

Det är så att jag har 3 tabeller:

ekipage
=======
- eid (räknare PK)
- enamn (text(255))

prov
====
- pid (räknare PK)
- pdatum (datum/tid)
- pgrupp (tal)

resultat
========
- rid (räknare PK)
- rprov (tal)
- rekipage (tal)
- rpoang (tal)

Relationer:
ekipage.eid 1:N resultat.rekipage
resultat.rprov 1:N prov.pid

Det jag nu skulle vilja få fram är:
1: de fem bästa resultaten (rpoang) för varje ekipage per prov.pgrupp

Varje ekipage kan finnas från 0 --> N gånger men endast en ggn per prov.

2: Sorteringen ska vara enligt följande
- prov.pgrupp ASC
- resultat.rpoang DESC
- ekipage.enamn ASC

Som sagt, har setat och kört fast, stirrat mig blind så nu sätter jag hoppet till stjärnorna här i SQL forumet.

[r]
skulle kanske säga att det är en Access 2k databas-fil
[/r]

cya,
PatrikB

Medlem sedan dec. 200012 464 inlägg
#2
select * from (
select (select count(*) from resultat 
         where rpoang > r.poang
           and rprov = r.rprov
           and rekipage = r.rekipage) + 1 as rank,
       e.enamn ,p.pgrupp,r.rpoang
  from resultat as r,
       ekipage as e,
       prov as p
 where e.eid = r.ekipage
   and r.rprov = p.pid ) as s
where rank <= 5
order by pgrupp asc,
         rpoang desc,
         enamn asc
Medlem sedan mars 20002 836 inlägg
#3

Tyvärr .... den funka inte.
Felmess:
Microsoft JET Database Engine fel '80004005'

Frågan är för komplex.

:(

e ju sketna access vet du .... kan ju inte vara såååå komplexa ;)

cya,
PatrikB

Medlem sedan dec. 200012 464 inlägg
#4

Jaha, om du definerar en vy för den inre selecten då

create view s as
select (select count(*) from resultat 
where rpoang > r.poang
and rprov = r.rprov
and rekipage = r.rekipage) + 1 as rank,
e.enamn ,p.pgrupp,r.rpoang
from resultat as r,
ekipage as e,
prov as p
where e.eid = r.ekipage
and r.rprov = p.pid

och sedan

select * from s
where rank <= 5
order by pgrupp asc,
rpoang desc,
enamn asc

vet inte om det hjälper.

Medlem sedan mars 20002 836 inlägg
#5

Thanx igen,

ska kika på den under helgen .... om man får ngn tid över vill säga ;e

Hör av mig huruvida det funkar eller ej...

cya,
PatrikB

Medlem sedan mars 20002 836 inlägg
#6

.... o så kan man inte slita sig från "kodning" utan man måste ju bara "testa lite granna".
Då uppkom detta fel:
Microsoft JET Database Engine fel '80004005'

Ogiltig SQL-syntax - förväntade ett visningsnamn.

sååå, accessen fortsätter att "konstra" och vill inte ta view .....

Får kanske lösa det med logik i koden ... fast vill ju helst slippa det då det kan vara "ett par st" ekipage :e

cya,
PatrikB

Medlem sedan mars 20002 836 inlägg
#7

jag har lekt lite mer och har nu fått fram fram en extra tabell (använde select into statement istället) och med anrop till den fått bra prestanda. Visningar med view va ingen höjdare ;e

MEN!! (alltid är det något) jag får inte till det som jag vill.
Tabellen ser ut så här och skapas dynamiskt när fler resultat har lagts till i andra tabeller.

tblAretsHund
- ahForare [text]
- ahHund [text]
- ahKlubb [text]
- ahPoang [tal (kan ta decimaltal)]
- ahGrupp [tal]
- ahDatum [datum/tid]

det jag vill få fram är:

1. Top 10 av förarnas medelpoäng från deras 5 bästa tävlingsresultat (poäng) från respektive grupp.
Om föraren ej har 5 resultat ska summan ändå delas med 5.
Om föraren har mer än 5 tävlingar så ska endast de 5 bästa tas med.

2. De fem bästa resultaten ska oxå visas tillsammans med medelpoängen.
Om föraren ej har 5 tävlingar så ska de poängen som fattas visa 0

Går det att få till en sql-fråga för ovanstående eller kanske är det bästa att lösa detta med logik i koden fast .... då kommer prestandan att suga då det kan vara x antal tusen förare i databasen =(

cya,
PatrikB

269 ms totalt · 4 externa anrop · v20260731065814-full.05830320
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)