Avatar billede stigc Nybegynder
24. juni 2001 - 19:35 Der er 23 kommentarer og
2 løsninger

SQL syntaks

Tabellen ser sådan her ud:

userid
date
score

og der kan være mange rækker for hver bruger. Hvordan finder jeg den sidste score for hver brugere? Her ønsker jeg et udtræk med userid, score, date. Problemet er at der sagtens kan være flere score for en bruger på samme dato.

Kun én SQL sætning, tak :)


Avatar billede perla Nybegynder
24. juni 2001 - 20:05 #1
Hvis du opretter et autonummerering felt i databasen og kalder det uid vil nedenstående virke

Select * from score where uid in(SELECT  max(uid)
FROM Score group by userID);

Det skal så bemærkes at det er den sidst indtastede værdi der vil blive vist.

-Per
Avatar billede stigc Nybegynder
24. juni 2001 - 20:54 #2
Det er desværre ikke muligt, da dato\'erne ikke har noget med indtastningstidpunktet at gøre, og heller ikke rækkefølgen. Bliver det så umuligt?
Avatar billede perla Nybegynder
24. juni 2001 - 21:00 #3
Hvis datoerne er ens hvordan vil du så skelne dem ?
Avatar billede xelor Nybegynder
24. juni 2001 - 21:09 #4
Denne her burde kunne klare problemet :

SELECT DISTINCT uid, max(dato) FROM Score

Avatar billede xelor Nybegynder
24. juni 2001 - 21:11 #5
Pladder, ser jeg lige......
Datoerne har jo intet med det at gøre...
Der skal være et timestamp på hver enkelt record, eller har systemet ingen chancer for at finde ud af, hvilken post er indtastet sidst.....
Avatar billede xelor Nybegynder
24. juni 2001 - 21:12 #6
Så hvis du ikke har nogen felter i din tabel, der fortæller om, hvilken rækkefølge de er indtastet i, så vil din forestpøgsel ikke være mulig....
Avatar billede perla Nybegynder
24. juni 2001 - 21:18 #7
xelor > den forspørgsel du angiver vil ikke virke den resurnerer jo kun en record lige meget hvor mange brugere der er, og hvorfor distinct når den kun returnerer 1 ?

-Per
Avatar billede stigc Nybegynder
24. juni 2001 - 21:20 #8
Jeg forstår dig ikke helt, xelor. Dato feltet er et tidsstempel. For at forklare mig bedre, så:

SELECT max(dato) FROM tabel GROUP BY userid

giver den nyeste dato for hver userid i tabellen. Jeg ønsker bare også at få score og userid med ud.
Avatar billede perla Nybegynder
24. juni 2001 - 21:31 #9
stic > du har ikke svaret på mit spørgsmål.

men hvis de de ikke ligger i rækkefølge og indtastningstidspunket(tidspunkt de bliver lagt i databasen) ikke er et kriterie, så kan det ikke umiddelbart lade sig gøre.

-Per
Avatar billede stigc Nybegynder
24. juni 2001 - 21:37 #10
Så ikke lige dit spm.
Hvis datoerne er ens hvordan vil du så skelne dem ? 

Når man spørger om en brugers nyeste dato, så skal den tage den nyeste, men hvis der er to \"lige gamle\" rekorder, må den bare tage den ene. Er det helt urimelig det jeg beder om, i forhold til database strukturen?
Avatar billede perla Nybegynder
24. juni 2001 - 21:47 #11
Næ, men så er du ikke sikker på at det er den sidste score. Hvordan lægger du dem ned i databasen siden du ikke har sidste score. Er det brugeren der taster dato og score? Hvis du logger tidspunktet for indskrivning ville du jo have løst problemet.

-Per
Avatar billede xelor Nybegynder
24. juni 2001 - 22:05 #12
>stigc : OK, men hvis det er hvad der skal til, så skal du bruge denne sætning :

SELECT MAX(dato), score, userid FROM Score GROUP BY Max(dato),score, userid.
Avatar billede stigc Nybegynder
25. juni 2001 - 00:00 #13
xelor>>

Det giver ikke hvad jeg ønsker. Hvis en bruger har flere score på samme dato giver det mig alle dem.
Avatar billede stigc Nybegynder
25. juni 2001 - 00:01 #14
du kan da heller ikke \"group by max(date)\"
Avatar billede stigc Nybegynder
25. juni 2001 - 00:02 #15
indtastnings tidspunktet og dato-feltet har intet med hinanden at gøre. Det ser ud til at man ikke kan gøre det eller hvad?
Avatar billede perla Nybegynder
25. juni 2001 - 00:08 #16
kan du ikke bare lægge indstatningtidspunktet ind også, så ville du jo vide hvilken der var sidst.

At udtrække den er ingen problem, når bar det andet er løst.

-Per
Avatar billede stigc Nybegynder
25. juni 2001 - 00:33 #17
jeg ved ikke hvad jeg skulle bruge indtastningstidspunktet til????? Det har intet med min data at gøre. Hvordan skulle det kunne hjælpe mig?
Avatar billede proaccess Nybegynder
25. juni 2001 - 07:29 #18
Hvis du bare vil have een af dine score\'s fra seneste dag pr. UesrID, så skulle denne kunne gøre det...

SELECT Sc.Dato, Sc.UserID, First(Sc.Score) AS eenScore FROM Score AS Sc WHERE Dato=(SELECT Max(Dato) FROM Score WHERE UserID=Sc.UserID) GROUP BY Sc.Dato, Sc.UserID
Avatar billede proaccess Nybegynder
25. juni 2001 - 07:54 #19
Du vil måske snarere bruge Max(Sc.Score), for derved at få den største score på den seneste dag pr. UserID...
Avatar billede jimse Nybegynder
25. juni 2001 - 09:00 #20
Som jeg hører det indtaster du datoen på hændelsen, selv om du laver indastningen på et senere tidspunkt. Når du siger at der kan være flere scorer på samme dato for samme ID, ville det så ikke være en ide at tilføje et starttidspunkt (kl.) for hændelsen. Jeg går ud fra at samme ID ikke kan starte på flere hændelser samtidig.
Avatar billede proaccess Nybegynder
28. juni 2001 - 15:16 #21
Har du fået set nærmere på denne:

SELECT Sc.Dato, Sc.UserID, Max(Sc.Score) AS eenScore FROM Score AS Sc WHERE Dato=(SELECT Max(Dato) FROM Score WHERE UserID=Sc.UserID) GROUP BY Sc.Dato, Sc.UserID

Hvis ikke du mener, det løser dit problem, så fortæl nærmere...
Avatar billede jensjensjens Nybegynder
28. juni 2001 - 16:56 #22
LUK NU RØVEN!!!!!!!!!!!! KLAMME BØSSER!!!!!!!!!!!!!1
Avatar billede proaccess Nybegynder
02. juli 2001 - 10:56 #23
Får vi snart en afslutning på denne...? og IKKE fra jensjensjens !!!
Avatar billede proaccess Nybegynder
26. juli 2001 - 15:12 #24
Kan vi få dette spørgsmål lukket ???
Avatar billede stigc Nybegynder
24. august 2001 - 14:42 #25
lukker
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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