OVH Cloud OVH Cloud

10% au hasard?

8 réponses
Avatar
BibiMtl
windows 2000 office 2000

Bonjour, je dois sortir 10% des enregistrement de ma=20
table mais de facon al=E9atoire comment inscrire ceci dans=20
ma requete? je ne veux donc pas si j'ai 100=20
enregietrement, les 10 premier ou les 10 dernier ( qui=20
represente 10%) mais plutot ex : le=20
8,12,34,65,78,2,5,9,11,77 enregistrements
evidement le meme enregistrement ne dois pas sortir 2=20
fois..

MERCI beaucoup!!

8 réponses

Avatar
NetChris
La liste déroulante "Premières valeurs", disponible en mode Création de
requête, permet de récupérer x enregistrements (ou x% de ces
enregistrements). Vous pouvez choisir l'une des valeurs proposées, ou taper
une valeur manuellement.


a.. Combinée à un tri croissant ou décroissant, cette option permet de
sélectionner les x premiers ou derniers enregistrements.
b.. Pour en sélectionner x au hasard, il faut en plus trier la requête sur
un critère aléatoire. Voyez l'article Hasard pour plus de détails.


"BibiMtl" a écrit dans le message de
news:032401c369ee$14012c60$
windows 2000 office 2000

Bonjour, je dois sortir 10% des enregistrement de ma
table mais de facon aléatoire comment inscrire ceci dans
ma requete? je ne veux donc pas si j'ai 100
enregietrement, les 10 premier ou les 10 dernier ( qui
represente 10%) mais plutot ex : le
8,12,34,65,78,2,5,9,11,77 enregistrements
evidement le meme enregistrement ne dois pas sortir 2
fois..

MERCI beaucoup!!
Avatar
mjc
bonjour,
je pense qu'il faut utiliser une table temporaire locale indexée clé
primaire sur le N° d'enreg

- utiliser également vba pour la remplir avec la commande :
Dim MyValue
Randomize ' Initialise le générateur
' de nombres aléatoires.

MyValue = Int((nb * Rnd) + 1) ' Renvoie une valeur
' aléatoire comprise entre
' 1 et nb étant le nombre maxi de tes enregs

ce pavé est à repéter autant de fois que (nb * 0.1) en vérifiant que celà
n'a pas été déjà généré

donc on y va :

formulaire + bouton avec le code :

dim ds as recordset
set ds = currentdb.openrecordset("ma table complète") ' celle ou il y a tous
les energs
dim lo as recordset
set lo = currentdb.openrecordset("locale echantillon") ' table locale avec
juste la clé
lo.index = "PrimaryKey"
dim nbmaxi as long
nbmaxi = ds.count
dim nb10 as long
dim x as long
Dim MyValue as long

for x = 1 to nb10
hazard:
Randomize ' Initialise le générateur de nombres aléatoires.
MyValue = Int((nbmaxi * Rnd) + 1) ' Renvoie une valeur aléatoire
comprise entre 1 et nbmaxi
lo.seek "=",myvalue
if not lo.nomatch then goto hazard 'si ça existe déjà, rebelote !
lo.addnew
lo![clef] = myvalue
lo.update
next x
ds.close : set ds = nothing
lo.close : set lo = nothing

après , reste plus qu'à faire le lien avec la table locale dans ta requête

bon c'est peut-être un peu bugué, mais tu as compris le principe ?

cdt
charlier
www.charlier.fr












"BibiMtl" a écrit dans le message news:
032401c369ee$14012c60$
windows 2000 office 2000

Bonjour, je dois sortir 10% des enregistrement de ma
table mais de facon aléatoire comment inscrire ceci dans
ma requete? je ne veux donc pas si j'ai 100
enregietrement, les 10 premier ou les 10 dernier ( qui
represente 10%) mais plutot ex : le
8,12,34,65,78,2,5,9,11,77 enregistrements
evidement le meme enregistrement ne dois pas sortir 2
fois..

MERCI beaucoup!!
Avatar
3stone
Salut,

BibiMtl
Bonjour, je dois sortir 10% des enregistrement de ma
table mais de facon aléatoire comment inscrire ceci dans
ma requete? je ne veux donc pas si j'ai 100
enregietrement, les 10 premier ou les 10 dernier ( qui
represente 10%) mais plutot ex : le
8,12,34,65,78,2,5,9,11,77 enregistrements
evidement le meme enregistrement ne dois pas sortir 2
fois..


Vas regarder ceci :

http://www.mvps.org/accessfr/queries/qry0011.htm

Pour les nombres d'enregistrements demandés (les 10%),
tu les obtiens facilement avec un

Int(DCount("*";"LaTable") / 10)


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------
Avatar
BibiMtl
SUITE DE MON AUTRE RÉPONSSE

le pourcentage du top est different chaque mois, car il
depend du nombre d'enregistrement


janvier 8.33 % de 300 = 25
fevrier 9.09 % de 275 = 25
mars 10 % de 250 = 25

ainsi de suite jusqu'a decembre 100% de 25 = 25


c,est pour ca que le top doit etre un champ, ou
simplement la fonction... mais comment l'écrire? merci..

-----Message d'origine-----
Salut,

BibiMtl
Bonjour, je dois sortir 10% des enregistrement de ma
table mais de facon aléatoire comment inscrire ceci dans
ma requete? je ne veux donc pas si j'ai 100
enregietrement, les 10 premier ou les 10 dernier ( qui
represente 10%) mais plutot ex : le
8,12,34,65,78,2,5,9,11,77 enregistrements
evidement le meme enregistrement ne dois pas sortir 2
fois..


Vas regarder ceci :

http://www.mvps.org/accessfr/queries/qry0011.htm

Pour les nombres d'enregistrements demandés (les 10%),
tu les obtiens facilement avec un

Int(DCount("*";"LaTable") / 10)


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------




.



Avatar
3stone
heu...

Je voulais dire que...


Normalement, tu PEUX appeller...

;-)


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------
Avatar
BibiMtl
Toujours le memme mesage d'erreur, si je met :
SELECT TOP f_DixPct req_random_a.*
FROM req_random_a
WHERE (((randomizer())=0))
ORDER BY Rnd(IsNull(tbl_cpt_par_succ.N°)*0+1);

je recois le message :
Dans l'instruction SELECT, un mot réservé ou un argument
est mal orthographié ou absent, ou la ponctuation est
incorrect

qu'est-ce que je fais de pas correcte? si je remplace le
f_DixPct par 1 ca fonctione, donc le probleme vient bien
de l'appel de la fonction j'ai tenter f_DixPct () mais
meme probleme...

et le module :
Function f_DixPct() As lng
f_DixPct = Int(DCount("*", "req_random_a") / 10)
End Function

merci..




-----Message d'origine-----
Salut,

BibiMtl
le pourcentage du top est different chaque mois, car il
depend du nombre d'enregistrement


janvier 8.33 % de 300 = 25
fevrier 9.09 % de 275 = 25
mars 10 % de 250 = 25

ainsi de suite jusqu'a decembre 100% de 25 = 25

c,est pour ca que le top doit etre un champ, ou
simplement la fonction... mais comment l'écrire? merci..




Normalement, tu ne peux appeller une fonction qui te
calcule les 10%



Function f_DixPct () as lng
f_DixPct = Int(DCount("*";"LaTable") / 10)
End Function


Pour ensuite l'utiliser ainsi...

select top f_DixPct mytable.*from mytable
where randomizer() = 0
order by rnd(isnull(mytable.question) * 0 + 1)


pas testé...


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------





.



Avatar
BibiMtl
Re.re.re..re :) hihi
Bonjour,
le TOP 10 pourcent.. je connais:)
mais comment parametre le pourcentage, car il change a
chaque mois..

au debut j'ai 300 enregistrement qui doivent etre
verifier sur 12 mois.. donc 1/12 des enregistrement
chaque mois..

donc en janvier, je veux 8.33% enregistrement de 300 qui
me donne 25 enregistrement

mais en fevrier, je ne veux plus 8.33% car c'est 1/11 des
enregistrement car je suis rendu a 275 enregistrement a
vérifier, donc 9.09% de 275 = 25

et ainsi de suite jusqu'a decembre qui seras 1/1 soit
100% de 25%

tous ce que je dois faire c,est savir coment, dire a TOP
de voir le % dans un champ... car j'ai deja ma table avec
mes mois et mes %

table
mois pourcentage


donc qq. chose du genre : TOP table.pourcentage

SELECT TOP table.pourcentage req_random_a.*
FROM req_random_a
WHERE (((randomizer())=0))
ORDER BY Rnd(IsNull(tbl_cpt_par_succ.N°)*0+1);


mais c ca qui fonctionne jamais.. peut-etre par une
fonction, car vous dite qu'on peut appeler une
fonction... ou c'est la ponctuation que j'ai pas de
correcte

p.s. évidement la donner viendrais d'une requete, ou
directenment de mon formulaire, pour savoir quel
mois/pourcentage..


merci a vous tous de prende le temps... :)



-----Message d'origine-----
ah quand méme, honnetement je m'inquiétais, l'effet de
la chaleur sur les

personnes agées (très) .... :O))

--
Pierre CFI
Microsoft MVP Access

Pour mieux utiliser microsoft.public.fr.access...
http://users.skynet.be/mpfa/charte.htm

"3stone" a écrit dans le message de
news:


Salut,

BibiMtl
Toujours le memme mesage d'erreur, si je met :
SELECT TOP f_DixPct req_random_a.*
FROM req_random_a
WHERE (((randomizer())=0))
ORDER BY Rnd(IsNull(tbl_cpt_par_succ.N°)*0+1);



En fait... ce sont les enregistrements aléatoires que
tu souhaite,


mais, la valeur des 10% est fixe, n'est ce pas ?


Pourquoi je cherche compliqué à dans ce cas ;-))


Ecris tout simplement:

SELECT TOP 10 PERCENT req_random_a.*
FROM req_random_a
WHERE (((randomizer())=0))
ORDER BY Rnd(IsNull(tbl_cpt_par_succ.N°)*0+1);


De plus, comme le dit Daniel, le TOP exige un
littéral ;-(




--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------







.




Avatar
3stone
Salut,

BibiMtl
le TOP 10 pourcent.. je connais:)
mais comment parametre le pourcentage, car il change a
chaque mois..
[...]
tous ce que je dois faire c,est savir coment, dire a TOP
de voir le % dans un champ... car j'ai deja ma table avec
mes mois et mes %



Cree ta requête de facon dynamique alors...


Public Function CreeRequete()
Dim Db As DAO.Database, Qd As QueryDef, strSQL As String

strSQL = "SELECT TOP " & DLookup("Champ", "MaTable") _
& " PERCENT * FROM req_random_a " _
& " WHERE (((randomizer())=0)) " _
& " ORDER BY Rnd(IsNull(tbl_cpt_par_succ.N°)*0+1);"

Set Db = CurrentDb
Set Qd = Db.CreateQueryDef("MaRequete")
Qd.SQL = strSQL
End Function


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------