Select top 5 * - fast tvärtom?

ASP

20 svar · 287 visningar · startad av jimpa

Medlem sedan jan. 2001361 inlägg
Trådstart#1

Hej,

Hur skriver man SQL-frågan om man vill visa dom 5 lägsta värderna från en tabell?

Mvh

Medlem sedan mars 2001309 inlägg
#2

Är det inte bara att skriva

Select top 5 * from tabelnamn Order by kolumnnamn desc
Medlem sedan dec. 20003 563 inlägg
#3

Jo ;)

Medlem sedan dec. 200012 464 inlägg
#4

Nej,

Select top 5 * from tabelnamn Order by kolumnnamn [b]asc[/b]
Medlem sedan mars 2001309 inlägg
#5

Men är inte asc default.....

Men det stämmer som LarsG skriver...
I bland svara man innan man tänkt....

Medlem sedan dec. 20003 563 inlägg
#6

Was ist das asc?

Medlem sedan mars 2001309 inlägg
#7

asc är stigande ordning och Desc fallande.....

Medlem sedan dec. 200012 464 inlägg
#8

Jo asc är default, så man kan utelämna det, om man vil.

Medlem sedan dec. 20003 563 inlägg
#9

DESC var det naturliga svaret när man inte tänker på frågan. :r

Medlem sedan maj 200010 687 inlägg
#10

Men om man vill hämta de fem med högst värde, men ordna dem ascending..?

Medlem sedan dec. 200012 464 inlägg
#11

Ett ineffektivt sätt

select * from ogrish where id in (select top 5 id from ogrish order by id desc) order by id asc

Annars kan göra


sql = "select top 5 * from ogrish order by id desc"
set rs = server.createobject("adodb.recordset")
rs.open sql,connection,2
rs.movelast
while not rs.bof
'skriv
rs.moveprevious
wend
Medlem sedan maj 200010 687 inlägg
#12

Okej, men kan man välja de 10 högsta värdena och sen av de tio välja de fem lägsta och ordna de ascending?
Vill lära mig "nästla" sql frågor.

Tänkte man kunde använda det till paging. Borde bli bättre prestanda än att hämta allt och sen använda rs.Move X..

Medlem sedan dec. 200012 464 inlägg
#13

Jo du kan ju nästa godtyckligt, men att använda det till paging är nog inte så bra. Join kostar ganska mycket speciellt om man använder not in som det blir om man vill ha det till paging). PatrikB gjorde lite mätningar på det och kom fram till att det var bättre att inte använda den metodiken. Disconnectade recordset/getrows är nog bättre

(För att svara på din fråga dock.)


select top 5 * from ogrish where id in (select top 10 id from ogrish order by id desc) order by id asc
Medlem sedan jan. 2001271 inlägg
#14

Det är väl så LarsG har gjort i sitt tidigare svar, bara att lägga till ytterligare en top-sats i den yttre SQL-satsen?

Medlem sedan maj 200010 687 inlägg
#15

Jo jag upptäckte nyss det. :)

Medlem sedan jan. 2001271 inlägg
#16

En off-topic fråga, verkar som många här skriver sina SQL-satser på en rad - varför? Måste bli väldigt jobbigt när uttrycken växer och man jobbar med några nästlade frågor...

Medlem sedan maj 200010 687 inlägg
#17

Hmm, går det inte att skriva så här:

select top (select count(postid) from tblpost) * from tblpost

Meningslöst som det är skrivet nu. Men skulle man göra om lite så hade den kunnat vara användbar..

Medlem sedan dec. 200012 464 inlägg
#18

Nej, argumentet till top måste vara en konstant.

Medlem sedan maj 200010 687 inlägg
#19

När jag skriver mina frågor i Query Analyzern så skriver jag alltid dem på flera rader. Sen när jag läger in SQL-strängen i VB-koden så brukar jag om jag tycker det är nödvändigt radbryta så här:

sql =	"SELECT tblPost.*, tblForum.*, " & _
	"(SELECT COUNT(*) FROM tblPost) AS PostCount FROM tblPost " & _
	"INNER JOIN tblForum ON tblPost.ForumId = tblForum.ForumId " & _
	"WHERE PostId > 10 " & _
	"ORDER BY PostId ASC"
Medlem sedan maj 200010 687 inlägg
#20

Okej.. :l

260 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)