returnera slumpad rad

Databaser & SQL

2 svar · 564 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Trådstart#1

Har följande:

ALTER PROCEDURE dbo.GetRandomMember
	(
	@CityId int = 0,
	@Name varchar(50) = null
	)
AS

SELECT MemberId
FROM Member

WHERE (CityId = @CityId OR @CityId = 0)
AND ([Name] like '%'+@Name+'%' OR @Name is null)
AND Status = 1
ORDER BY Place DESC, [Name] ASC

Nu vill returnera en slumpad rad av resultatet som denna fråga ger.(är det möjligt att ju högre Place värde man har ju större chans ska det vara att man blir vald?)

Som frågan är nu returnerar den samma hela tiden. :OO

Anv MSSQL

Går detta o lösa??

Tacksam för all hjälp :stud

Medlem sedan juni 20008 205 inlägg
#2

Vinnaren skrev:

Nu vill returnera en slumpad rad av resultatet som denna fråga ger.(är det möjligt att ju högre Place värde man har ju större chans ska det vara att man blir vald?)

Någonting sånt här, kan det bli:
SELECT TOP 1 * FROM grejen WHERE blahablaha ORDER BY Place * RAND(CAST(NEWID() AS VARBINARY)) DESC

Dvs, sortera resultatet på Place multiplicerat med ett slumpmässigt tal i intervallet [0..1). Större värden för Place kommer genomsnittligen få högre resultat av den uträkningen, men de kan lika väl få resultat 0. (Men om någon rad har Place <= 0 kommer den sannolikt aldrig att väljas, vilket förstås går att åtgärda med listiga subselects.)

Medlem sedan sep. 2005833 inlägg
#3

tack, ser ut att fungera kanon (y)

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