24. juni 2001 - 19:35Der 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.
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.....
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 ?
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.
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?
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.
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
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.
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...
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.