Avatar billede funkyloonie Nybegynder
21. marts 2005 - 13:27 Der er 8 kommentarer og
2 løsninger

Selecte x antal rækker

Hej :-)

Jeg vil gerne lave en sql hvor jeg kan selecte 100 rækker i en tabel. jeg kan få de første 100 ved 'select top 100' men hvad hvis jeg vil have række 200 til 300 ??
Avatar billede arne_v Ekspert
21. marts 2005 - 13:34 #1
Formentligt er det nemmeste:

SELECT TOP 300 * FROM t ORDER BY f ASC

og bare smide de første 200 væk.

Ellers skal du:

SELECT * FROM (SELECT TOP 100 FROM (SELECT TOP 300 * FROM t ORDER BY f ASC)  ORDER BY f DESC) ORDER BY f ASC
Avatar billede funkyloonie Nybegynder
21. marts 2005 - 13:36 #2
nederste kan bruges. Savner mysql's limit funktioanlitet...
Avatar billede lorentsnv Nybegynder
21. marts 2005 - 13:41 #3
Der findes ingen parameter på TOP der kan angive at der skal være 200 til 300.

Du kan måske forklare lidt mere hvorfor du ønsker en sådan select, så er det måske også nemmere at se om der findes alternative måder at løse dit problem på.

Hvis din tabel har en ID-kolonne, kunne du måske sørge for at du får nogle højere IDer ved:
Select top 100 *
From Tabel
Whrere ID > 200

En alternativ måde at gøre det på kunne være

Select top 300 *
from table
where ID not in(select top 200 ID from Tabel)
Avatar billede funkyloonie Nybegynder
21. marts 2005 - 14:12 #4
det skal egentlig bare bruges til sidevisninger, dvs. de første 100 på den første side osv...

lorentsnv sidste foreslag er nok det "kønneste" foreslag
Avatar billede ldanielsen Nybegynder
21. marts 2005 - 14:45 #5
Hvis du bruger ADO kan du benytte Pagesize og AbsolutePage, det var måske det allersmarteste
Avatar billede funkyloonie Nybegynder
21. marts 2005 - 14:50 #6
skal overveje det. har dog lavet den anden løsning. points anyone??
Avatar billede arne_v Ekspert
21. marts 2005 - 17:17 #7
Man kan godt undre sig over at det ikke er muligt at angive offset, da det faktisk
er en nyttig feature.

Vær dog opmærksom på at principielt bør du kun lave det på readonly data. Hvis
data bliver ændret mellem queries, så giver LIMIT m,n er stærkt misvisende
billede af data.
Avatar billede arne_v Ekspert
21. marts 2005 - 17:17 #8
et svar for mine forslag
Avatar billede ldanielsen Nybegynder
21. marts 2005 - 17:32 #9
nej tak
Avatar billede lorentsnv Nybegynder
21. marts 2005 - 19:36 #10
Jeg ville nok også heller foreslå en ADO-løsning, da jeg er usikker på om f.eks. Top 300 giver nøjagtig samme resultat hver gang. Det gør det nok på en enkelt tabel, hvis der ikke bliver indsat records i mellemtiden, men hvis du har flere joins, ville jeg lige teste dette inden jeg brugte det seriøst.
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