Avatar billede swaq Nybegynder
06. februar 2008 - 17:06 Der er 8 kommentarer og
1 løsning

Lottery SQL

Hej eksperter,

I en tabel med 2000 personer (ID, fornavn, efternavn, by) har jeg brug for at udvælge 200 tilfældige - én fra hver by.

Problemet er, at der er 400 byer. Jeg skal altså ende ud med 200 personer fra 200 byer.

Hvordan klarer jeg lige det i Access?

Jeg har forsøgt at GROUP BY by og DISTINCT by, men med aggregeringsfunktioner bliver jeg tvunget til at aggregere på hele udtrykket - altså også på fornavn og efternavn - og så er jeg lige vidt.

Håber I kan hjælpe!
Avatar billede swaq Nybegynder
06. februar 2008 - 17:06 #1
Skal lige siges, at jeg godt ved 'by' er et reserveret ord i SQL. Jeg har i stedet brugt 'stad'.
Avatar billede terry Ekspert
06. februar 2008 - 17:44 #2
Avatar billede terry Ekspert
06. februar 2008 - 17:59 #3
Avatar billede swaq Nybegynder
06. februar 2008 - 18:03 #4
Hi Terry,
Thanks a lot for your suggestions. The first one unfortunately I cannot use as it does not allow me to only select one from each town. Same goes for suggestion two in fact, but I had already read that suggestion from my own search. The PickRandom sub does what it is supposed to do - only problem here is the towns again. I need only one from each town.
Avatar billede erikjacobsen Ekspert
06. februar 2008 - 18:26 #5
Det kan være, det er godt at hedde Zacharias ... En lille idé

  select top 200 max(concat(fornavn,efternavn)),stad from dintabel group by stad

Det er bestemt ikke tilfældigt ... (og jeg ved ikke om man kan bruge concat på den måde. Har du et id i rækken, kan du bruge det i stedet for)
Avatar billede terry Ekspert
06. februar 2008 - 18:39 #6
Just an idea. First make a select which (if possible) selects 200 DISTINCT random [stad).
Then for each row make a sub select which selects a random person where [stad] i the sub select = [stad] in the first select.

Just an idea
Avatar billede swaq Nybegynder
06. februar 2008 - 19:22 #7
I found a solution using MAX(stad). First I make a table containing only one representative from each town:
SELECT stad, MAX(fornavn), MAX(efternavn), MAX(ID)
FROM table
GROUP BY stad

From this view I then query using the function Terry have already mentioned: http://www.fontstuff.com/vba/vbatut02.htm

I use TOP 200 in the select to get 200 individuals.

It is a dull manual process, but it seems to do the trick.

Thanks to both :)
Avatar billede swaq Nybegynder
06. februar 2008 - 19:24 #8
*And by the way... I have to use the random function: http://www.fontstuff.com/vba/vbatut02.htm one more time - otherwise I get the same 200 every time.
Avatar billede terry Ekspert
06. februar 2008 - 19:32 #9
Using MAX will return the same on every time so you should use the function to select random values.

Thanks for th epoints, hope it works as required.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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