Avatar billede cronqvist Nybegynder
08. maj 2004 - 09:09 Der er 16 kommentarer og
1 løsning

Select'e et bestemt antal rækker

Jeg har brug for via SQL at kunne vælge et bestemt antal rækker frem eller tilbage ud fra en bestemt række i en SQL Server tabel.

F.eks. har jeg i en tabel fat en bestemt række. Nu vil jeg gerne have de næste eller forrige 10 rækker.

Kan man selecte et bestemt antal rækker?
Avatar billede terry Ekspert
08. maj 2004 - 10:05 #1
SELECT TOP 10 * FROM YourTable WHERE ID > LastID ORDER BY ID
Avatar billede terry Ekspert
08. maj 2004 - 10:06 #2
LastID is obvioulsy the heighest of the last selection you made and for the first select will be 0
Avatar billede terry Ekspert
08. maj 2004 - 10:07 #3
In this example, I am assuning that you have a identity column as the primary key
Avatar billede cronqvist Nybegynder
08. maj 2004 - 11:15 #4
Hej Terry

Jeg er godt med på den med "TOP", men lad os nu sige at jeg skal finde de forrige 5 poster men i omvendt rækkefølge. Eks:

Jeg har en tabel med primær nøgle: Id, som jeg altid sorterer faldende. Det vil sige at hvis jeg står på en række med id=15000, er de forrige id'er 15001 og 15002 osv.

Følgende "select top 5 id from tabel where id>15000 order by id" giver:
15001
15002
15003
15004
15005

men jeg vil have dem ud i omvendt rækkefølge startende med 15005.

"select top 5 id from tabel where id>15000 order by id desc" dur ikke...det giver jo et helt andet resultat
Avatar billede terry Ekspert
08. maj 2004 - 14:20 #5
select top 5 id from tabel where id < LastID order by id desc

Last ID is now the lowest (last) value of the previous select.

Your first select will be

select top 5 id from tabel order by id desc
Avatar billede cronqvist Nybegynder
08. maj 2004 - 15:18 #6
Hej igen.

Det forstår jeg også godt, men det kan være at jeg skal forklare mig endnu tydeligere.

Jeg har ekspempelvis en list der ser således ud:

15005
15004
15003
15002
15001
15000 <-- Jeg kender kun til dette id
14999
14998
14997
14996
14995

Hvis jeg vælger næste 5 skal resultatet være:
14999
14998
14997
14996
14995

og hvis jeg vælger forrige 5 skal resultat være:
15005
15004
15003
15002
15001

Kan dette lade sig gøre med SQL eller er man nødt til, som du skriver, at kende til foregående søgning?

Håber at jeg har tydeliggjort mit spørgsmål en smule :-)
Avatar billede terry Ekspert
08. maj 2004 - 15:29 #7
Lets say you have a single record where the ID = 15000 and you want the next 5 and previos 5. You can use a UNION join for this

SELECT TOP 5 ID from tabel where ID < 15000 ORDER BY ID DESC
UNION
SELECT TOP 5 ID from tabel where ID > 15000 ORDER BY ID DESC

is this what you mean?
Avatar billede venne Nybegynder
10. maj 2004 - 10:36 #8
Måske sådan:

select id
from (select top 5 id from tabel where id>15000 order by id) as x
order by id desc
Avatar billede terry Ekspert
19. maj 2004 - 14:09 #9
!
Avatar billede terry Ekspert
23. maj 2004 - 20:21 #10
are we finished here?
Avatar billede terry Ekspert
24. maj 2004 - 19:34 #11
hows it going here?
Avatar billede xperoo Nybegynder
13. juni 2004 - 20:21 #12
Hej,

hvad med denne her:

use northwind

select top 5 * from products
where productid not in (select top 10 productid from products)

Den kan page frem og tilbage...
Avatar billede terry Ekspert
13. juni 2004 - 20:27 #13
I think cronqvist is away on a long holiday :o)
Avatar billede cronqvist Nybegynder
14. juni 2004 - 09:30 #14
Hej alle. Ja, jeg må altså lige trække på smilebåndet. Jeg er yderst taknemmelig for alle jeres forslag, men må altså også lige komme med en henstilling: Inden I poster jeres svar burde I måske afprøve jeres løsningsmodeller selv. Ingen af jer har ramt rigtigt endnu....og I er stadig langt fra.

Prøv en gang at læse mit indlæg d. 08/05-2004 15:18:22 og læg mærke til hvad det er for _2_ resultater jeg gerne vil have og læg ekstra mærke til sorteringen.

Terry: Dit forslag med UNION virker for det første ikke, da man ikke kan have en 'order by' inden UNION. For det andet giver dette altid _et_ samlet resultat og det er jo ikke det jeg søger.

xperoo: Prøv at sætte order by efter dit forslag og veksel mellem asc og desc og se hvilke resultater dette giver.

Venne: Prøv at vende dit 'større end' tegn om til et 'mindre end' tegn og læg mærke til resultatet. Resultatsættet kommer til at ligge lang fra det id der afgrænses på, vel og mærket hvis du udfører det på et id der ligger langt fra toppen eller bunden af dine data.

Endnu en gang mange tak for jeres ihærdighed :-)
Avatar billede proaccess Nybegynder
14. juni 2004 - 09:50 #15
Næste 5:
SELECT TOP 5 ID FROM Tabel WHERE ID<15000 ORDER BY ID DESC;

Forrige 5:
SELECT X.ID FROM (SELECT TOP 5 ID FROM Tabel WHERE ID>15000 ORDER BY ID ASC) AS X ORDER BY X.ID DESC;
Avatar billede cronqvist Nybegynder
14. juni 2004 - 09:58 #16
proacces: Gennemtænkt og afprøvet formoder jeg ;-)

Tak for svaret...det virker :-)
Avatar billede terry Ekspert
14. juni 2004 - 20:13 #17
cronqvist>As far as I can see venne's answer 10/05-2004 10:36:21 actually is the same as proaccess's (Forrige 5:)

and I hope you havent been laughing all the time we have been waiting for some feedback, it may become painfull :o)

Proaccess: Nice work :o)
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