Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Random numbers - the most efficient way
Message
De
08/09/2004 01:17:59
Al Doman (En ligne)
M3 Enterprises Inc.
North Vancouver, Colombie Britannique, Canada
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00939849
Message ID:
00940182
Vues:
24
This message has been marked as a message which has helped to the initial question of the thread.
>Nadya,
>
>>Mohammed Qasem gave me a quite interesting problem, which I am now (12:13am) trying to solve the most elegant way.
>
>Al and Sergey both posted what I consider the elegant way. But be warned prior to Europa TOP N can return more than N rows if there are ties in the last rows, so more work must be done to check for and eliminate them.

That's a good point. The first time I tested my routine I got 44 records returned, not 40. I was using RAND() instead of 1000000*RAND(). Since RAND() returns a value between 0 and 1, and decimals defaults to 2 I got a bunch of ties at 0.07, leading to the extra records.

Multiplying by a large value (I used a million, Sergey went even further) makes the chances of ties vanishingly small. But you're right, it's never zero. However, it's a simple matter to always take the first nn of the returned records if you know you're going to get at least nn random records.

I agree that this technique is elegant. However, Nadya asks for "efficient" in the thread title. As a guess, I'd say this technique isn't that efficient. For example, if you are trying to pull 40 random records out of a million, this technique means a million records will be pulled over the wire, sorted, then the top 40 sliced off the top. Doing 40 random GOTOs in the same million-record table may be more efficient.
Regards. Al

"Violence is the last refuge of the incompetent." -- Isaac Asimov
"Never let your sense of morals prevent you from doing what is right." -- Isaac Asimov

Neither a despot, nor a doormat, be

Every app wants to be a database app when it grows up
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform