Avatar billede mads_jac Nybegynder
04. juni 2002 - 15:31 Der er 10 kommentarer

Random select

Hej

Er der nogen der har en god ide til, hvordan man kan lave et select-statement, som sorterer datasættet i tilfældig rækkefølge fra gang til gang?

Jeg har forsøgt mig med:

select *, (rand() * 10) as hej
from <tabel />
order by hej

- men det giver ikke det ønskede resultat.
Avatar billede cbp Nybegynder
04. juni 2002 - 15:38 #1
Nej, Rand() bliver kun udført en gang og er derfor ens for alle rows. Derimod kan du bruge newid():

SELECT *
FROM myTable
ORDER BY NewID()
Avatar billede slash Nybegynder
04. juni 2002 - 15:39 #2
SELECT TOP 10 *
FROM tabel ORDER BY NEWID()
Avatar billede mads_jac Nybegynder
04. juni 2002 - 15:56 #3
NewID() er fortløbende på en eller anden måde. I hvert fald bliver mit resultat blot, at den starter et andet sted, eksempelvis:

select * from tabel:
1, 2, 3, 4, 5

select * from tabel order by newID():
3, 4, 5, 1, 2

Det er ikke "random" nok... Øv

Mads
Avatar billede cbp Nybegynder
04. juni 2002 - 16:03 #4
Hvordan er det 'ikke random nok'?
Avatar billede tmceu Praktikant
04. juni 2002 - 17:15 #5
mads_jac >> prøv at køre den nogle gange, så vil du se at resultatet bliver forskelligt og ikke kun et offset.
Avatar billede mads_jac Nybegynder
06. juni 2002 - 06:26 #6
Jeg har kørt den omtrent 50 gange, og som jeg skrev, får jeg ikke en tilfældig rækkefølge - blot et tilfældigt "start-sted". Jeg er med på, at det som sådan kan kaldes random - det er bare ikke det jeg skal bruge. I nogle programmeringssprog ville man kalde proceduren "Randomize" for at få posen rystet.

Jeg er interesseret i en sortering, der giver en fuldstændig fri og tilfældig rækkefølge, á la:

select ID from table order by xxxxx:
2,5,3,1,4

Håber det giver mening.

Mads
Avatar billede cbp Nybegynder
06. juni 2002 - 08:02 #7
Det er netop hvad order by newid() giver. Kan du ikke poste din sql her for du må gøre et eller andet anderledes.
Avatar billede mads_jac Nybegynder
06. juni 2002 - 08:12 #8
Min SQL er således:

select go_id
from ab_goods
order by newid()

Og resultatet1 bliver:

354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, etc.

Resultat2:
400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 411, 413, 414, 415, 416, 417, 418, etc.

ab_goods er en ganske almindelig tabel med fire kolonner - ikke noget hokus-pokus der...

Mads
Avatar billede tmceu Praktikant
06. juni 2002 - 10:39 #9
Der er noget helt galt med din SQL Server, for jeg har aldrig oplevet noget lignende. Jeg har lige testes på 4 forskellige servere: 7.0 m/SP3, 2000 m/SP1, 2000 m/SP2 og 2000 Developer Edition uden problemer.

Ikke at jeg kan forestille mig, at det kan være årsagen, men vi er jo ude i noget underligt. Hvilken collation kører du med ?
Avatar billede mads_jac Nybegynder
06. juni 2002 - 10:53 #10
Jeg kører med:

7.0 SP4
NT4.0 SP6

2002-06-03 15:08:46.65 spid1    Loading SQL Server's  Unicode collation.
2002-06-03 15:08:46.68 spid1    Loading SQL Server's  non-Unicode sort order and character set.
--
--
--
2002-06-03 15:09:00.76 spid1    SQL Server's Unicode collation is:
2002-06-03 15:09:00.76 spid1            'norsk (bokmål)' (ID = 1044).
2002-06-03 15:09:00.76 spid1            comparison style = 196609.
2002-06-03 15:09:00.76 spid1    SQL Server's non-Unicode sort order is:
2002-06-03 15:09:00.76 spid1            'danno_nocasepref' (ID = 183).
2002-06-03 15:09:00.76 spid1    SQL Server's non-Unicode character set is:
2002-06-03 15:09:00.76 spid1            'iso_1' (ID = 1).

Mads
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