Avatar billede -mundi- Nybegynder
23. marts 2005 - 15:14 Der er 17 kommentarer og
1 løsning

Irreterende select statement

Har en tabel med 3 kolonner
id brugerid status tid

f.eks
1 2 4 2005-03-25 : 12:00:23
3 4 5 2005-03-25 : 12:00:24
4 2 3 2005-03-25 : 12:00:25
5 4 2 2005-03-25 : 12:00:25
6 5 1 2005-03-25 : 12:00:25

hvordan hiver jeg sidste nye status ud for hver brugerid ud ?
Avatar billede -mundi- Nybegynder
23. marts 2005 - 15:15 #1
hmm 3 kolonner +1 til id :-)
Avatar billede dsj Nybegynder
23. marts 2005 - 15:21 #2
Prøv følgende:

SELECT TOP 1 brugerid, status FROM <tabel> GROUP BY brugerid, status ORDER BY tid DESC
Avatar billede arne_v Ekspert
23. marts 2005 - 15:21 #3
SELECT *
FROM tabel t1
WHERE tid=(SELECT MAX(tid) FROM tabel t2 WHERE t2.brugerid=t1.brugerid)

måske
Avatar billede lorentsnv Nybegynder
23. marts 2005 - 15:25 #4
Måske kan du bruge noget i retning af:

select t1.*
from table t1
    left join (
        select brugerid, max(tid) from tabel groub by brugerid) t2
    on t1.brugerid = t2.brugerid and t1.tid = t2.tid

Forudsætning er at du er sikker på at have en unik tid for hver statusændring på den enkelte bruger. Måske skulle du bruge datetime på tid, og ikke shortdatetime.

Det vil også kunne betale sig at have et index på brugerid og tid.
Avatar billede -mundi- Nybegynder
23. marts 2005 - 15:28 #5
Jeg bruger allerede datetime som tid.

Arne_v : Jeg sskal bruge data for alle brugerid

Tester lige Lorentsnv's foreslag
Avatar billede arne_v Ekspert
23. marts 2005 - 15:30 #6
mit forslag returnerer da også en række for hver brugerid ????
Avatar billede -mundi- Nybegynder
23. marts 2005 - 15:32 #7
sorry arne, så det som om du havde skrvet dsj's indlæg ... er lidt småstresset :-)
Avatar billede lorentsnv Nybegynder
23. marts 2005 - 15:34 #8
Jeg har testet min SQL, og den skla være:
select t1.*
from Test t1
    inner join (
        select brugerid, max(tid) as tid from Test group by brugerid) t2
    on t1.brugerid = t2.brugerid and t1.tid = t2.tid
Avatar billede lorentsnv Nybegynder
23. marts 2005 - 15:35 #9
Arne_v's forslag fungerer fint, og er simplere end hvad jeg har lavet.
Avatar billede arne_v Ekspert
23. marts 2005 - 15:36 #10
Men det er muligt at din performer bedre (afhænger lidt af om optimizeren kan
optimere min)
Avatar billede -mundi- Nybegynder
23. marts 2005 - 15:43 #11
Både arne_v og lorentsnv 's indlæg virker fint, de performer ens ifølge min query analyser så points må vist skulle deles i 2  :-) ?

Arne smid et svar
Avatar billede lorentsnv Nybegynder
23. marts 2005 - 15:47 #12
Arne var hurtigst, så giv Arne poengerne :-)
Avatar billede arne_v Ekspert
23. marts 2005 - 15:58 #13
svar
Avatar billede alaflam Nybegynder
23. marts 2005 - 15:58 #14
arne_v har nok af de point hehe :-)

han hun er sindsyg til IT
Avatar billede -mundi- Nybegynder
23. marts 2005 - 15:59 #15
tak for hjælpen, god påske til allesammen
Avatar billede arne_v Ekspert
23. marts 2005 - 16:01 #16
Jeg har kun fået skrabet 382418 af dem sammen ...

:-)
Avatar billede -mundi- Nybegynder
23. marts 2005 - 16:04 #17
Heh dit point regskab fylder 1.7 mb, tager en del tid at hente det ned
Avatar billede arne_v Ekspert
23. marts 2005 - 16:09 #18
Brug af pages havde nok været smart ....
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