Avatar billede olf Nybegynder
27. juni 2003 - 11:35 Der er 5 kommentarer og
2 løsninger

Speciel SELECT udvælgelse

Jeg har en tabel med følgende felter:
id (autonum)
userid
questionNum
sequence
answer

Mine brugere kan svare een eller flere gange på samme spørgsmål. Dvs at min tabel kan se således ud (jeg har her kun een bruger):

id  userid    questionNum  sequence    answer
1    'olf'    1            1          'Mit første svar'
2    'olf'    2            1          'asdf'
3    'olf'    1            2          'Mit andet svar'

Nu er udfordringen:
Jeg vil gerne lave et udtræk, hvor jeg kan se answer for højeste sequence nr på hvert unikke questionNum for bruger 'olf'.

Dvs her rækkerne med id 2 og 3 (række med id 1 er skal ikke med, da række 3 har et højere sequence nr for samme questionNum).

Jeg ønsker at have eet recordset der indeholder alle de relevante rækker (jeg kan godt lave mange forespørgsler til db'en og få svarene hvis jeg kun trækker et spørgsmål ud af gangen, så den løsning er her uinteressant.)

Håber det er til at forstå!
Avatar billede olf Nybegynder
27. juni 2003 - 11:36 #1
(Jeg prøver lige at formattere tabellen lidt bedre...)
id  userid    questionNum  sequence    answer
1    'olf'      1                1              'Mit første svar'
2    'olf'      2                1              'asdf'
3    'olf'      1                2              'Mit andet svar'
Avatar billede olennert Nybegynder
27. juni 2003 - 11:57 #2
På en Oracle database ville jeg gøre sådan her (virker forhåbentlig også med Access eller hvad det nu er du bruger):

select userid, questionNum, answer
from <indsæt dit tabelnavn her> outer
where sequence = (select max(sequence)
from <indsæt dit tabelnavn her igen> inner
where inner.questionNum = outer.questionNum
and inner.userid = outer.userid)
Avatar billede olennert Nybegynder
27. juni 2003 - 11:59 #3
Jeg overså lige at det kun var for user 'olf' du ville have et svar. Tilføj

and outer.userid = 'olf'

som den sidste linie i forespørgslen.
Avatar billede olf Nybegynder
27. juni 2003 - 12:28 #4
Hmm umiddelbart virker det ikke i MS SQL 2000. Jeg vil dog lige undersøge om jeg alligevel kan bruge logikken i det.
Avatar billede olf Nybegynder
27. juni 2003 - 12:42 #5
Okay, fandt selv løsningen...

select qa1.questionNum, qa1.answer
from questionAnswer qa1
where qa1.userId = 'olf'
and qa1.sequence in (
SELECT MAX(qa2.sequence) AS sequence
FROM questionAnswer qa2
WHERE qa2.questionNum = qa1.questionNum
)

Men mange tak for hjælpen alligevel!
Avatar billede olf Nybegynder
27. juni 2003 - 12:44 #6
Olenert, du får lidt point for din gode idé (som dog ikke kunne bruges på en MS SQL 2000 server) :-)
Avatar billede olf Nybegynder
27. juni 2003 - 12:46 #7
Ups, manglede lige en sidste betingelse, nemlig at qa2.userId = 'olf'
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