Avatar billede 3dmaxer.dk Nybegynder
08. februar 2001 - 22:28 Der er 5 kommentarer og
1 løsning

Sql problem

Jeg har en række ID\'er i en kollone som varierer i antal. Jeg skal dog altid bruge den højeste, den næsthøjeste og den tredje højeste. Dog ikke i samme udtræk så fx top 3 kan ikke bruges.

Hvordan får jeg fx den 2. højeste værdi?
Avatar billede pstric Nybegynder
08. februar 2001 - 23:12 #1
Lav en forespørgsel, der giver dig alle records undtagen den med den højeste ID. Den record der har den højeste ID i delresultatet, er så næsthøjest ialt.
Avatar billede 3dmaxer.dk Nybegynder
09. februar 2001 - 00:02 #2
Vil du være så venlig at uddybe det:

select * from DB where id <> top 1 ????????????

Jeg kan ikke helt følge dig.

Kan man evt. på en eller anden måde bruge:

SELECT top 1 (-1) * FROM ...

på en eller anden måde
Avatar billede pstric Nybegynder
09. februar 2001 - 00:12 #3
Jeg er ikke helt inde i Access\'s SQL dialekt, men noget i denne stil burde virke:

select * from tabel
where ID = (
  select max(ID) from (
    select ID from tabel where ID <> (select max(ID) from tabel)
  )
)

Den inderste select tager alle ID undtagen den højeste. Den højeste derfra er den næsthøjeste ialt.

Hvis top virker - jeg kender den ikke - så brug det. Det ser _meget_ nemmere ud. Og hvis det er nemmere, er det oftest også bedre.
Avatar billede 3dmaxer.dk Nybegynder
09. februar 2001 - 13:12 #4
det virker udemærket til den næstøverste,

strsql = \"select * from tabel where IDgal2 = \" & rs(\"idgal\") & \" and id = ( select max(ID) from ( select ID from tabel where ID <> (select max(ID) from tabel)))\"

men hvordan vil du så gøre det med den tredjeøverste id?

jeg har prøvet dette:
  strsql = \"select * from tabel where IDgal2 = \" & rs(\"idgal\") & \" and id = ( select max(ID) from ( select ID from tabel where ID <> (select top 2 (id) from tabel)))\"

det giver denne fejl:
Microsoft OLE DB Provider for ODBC Drivers fejl \'80004005\'
[Microsoft][ODBC Microsoft Access Driver] At most one record can be returned by this subquery

kan du klare den?
Avatar billede pstric Nybegynder
09. februar 2001 - 15:37 #5
Jeg fortsætter lige i min egen dialekt, det ser jo ud til at du sagtens kan oversætte til noget forståeligt:

select * from tabel where ID = (
  select max(ID) from (
    select ID from tabel where ID <> (
      select max(ID) from (
        select ID from tabel where ID <> (
          select max(ID) from tabel
        )
      )
    ) and ID <> (
      select max(ID) from tabel
    )
  )
)

Udvælger alle tupler fra den post hvor ID er trediehøjest.
  Trediehøjeste ID er den højeste ID blandt alle ID undtagen den næsthøjeste og den højeste.
    Næsthøjeste ID er den højeste ID blandt alle ID undtagen den højeste.
Avatar billede 3dmaxer.dk Nybegynder
15. februar 2001 - 15:17 #6
med lidt tilretning virkede det perfekt - tak
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