Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: koppelen van id's op basis van events
Prev Next
You are not authorized to post a reply.

Author Messages
Sjef JeftinkUser is Offline

Posts:3

07-09-2010 12:49:38 Alert 

Hoi Pass experts,

Ik heb mijn vraag al eerder gesteld bij een verkeerde rubriek, nu hier bij 'ontwikkelen'. Als volgt:

- het gaat om een bestand 'events' met ca 1 miljoen verschillende id's. id_n := id_1, id_2, id_3,..., id_1000000;

- deze id's delen een event met elkaar waarvan telkens een record  beschreven wordt in database 'events': ca. 1,2 miljard events (dus gemiddeld 1200 per id);

- de id's hebben niet met alle andere 999999 zo'n event-relatie, vaak worden events maar gedeeld met maximaal 30 andere id's.

- vaak is de teller tussen id_n - id_m relatie slechts 1 event of 2 events (max. bijna 200 trouwens);

- nu wil ik voor ieder id (alle 1 miljoen) een overzicht creeren waaruit blijkt met welke andere id's men zo'n event relatie heeft en (dit is de teller) hoevaak met die andere id 's die events gehad heeft. Als drempel geldt dat id_ n en id_m minimaal 10 events gehad moeten hebben. Er moet hiertoe dus een soort teller gemaakt worden die bijgehouden kan worden ( voor alle relevante id_n - id_m relaties) waarbij de database record voor record (event na event) afgelopen wordt.

- verder heb ik geen mogelijkheid om een 'create table' toe te passen:-( is alternatief 'view table' nuttige optie?

Hieronder al een tip van 'hartskeerl74', elementen zeker bruikbaar (thanx 74hartskeerl), maar ik ben benieuwd wie me nog verder kan helpen? Groeten, Sjef

>>>>>

hulp by hartskeerl74

Sjef,

afgaande op de beschrijving zou dit je in de richting moeten helpen.

create table #t (id1 int , id2 int);

insert into #t values
( 1, 2), (1, 3), (4, 5), (1, 2), (3, 6),( 1, 2),
(1, 3), (4, 5), (1, 2), (3, 6),( 1, 2), (1, 3),
(4, 5), (1, 2), (3, 6),( 1, 2), (1, 3), (4, 5),
(1, 2), (3, 6), (1, 2), (1, 3), (4, 5), (1, 2),
(3, 6),( 1, 2), (1, 3), (4, 5), (1, 2), (3, 6)
select id1, id2, COUNT(id1) as Teller from #t group by id1, id2 having COUNT(id1) > 10;

drop table #t

Hugo KornelisUser is Offline

Posts:46

10-09-2010 15:36:21 Alert 
Hoi Sjef,

Ongetwijfeld kunnen mensen je hier verder helpen, maar misschien moet je eerst aangeven wat er ontbreekt en/of fout is in de oplossing die hartskeerl74 geeft.

(De CREATE TABLE en INSERT opdrachten zijn bedoeld om testgegevens te maken; de SELECT is de opdracht die jij hopelijk kan gebruiken).

Met vriendelijke groeten,

Hugo Kornelis (SQL Server MVP)
Sjef JeftinkUser is Offline

Posts:3

22-09-2010 11:27:37 Alert 

Hoi allen, ik heb de tip gebruikt , ik kreeg een zekere output maar alleen voor de relaties die benoemd zijn: de reeks ( 1, 2), (1, 3), (4, 5), (1, 2), (3, 6),( 1, 2),
(1, 3), (4, 5), (1, 2), (3, 6),( 1, 2), (1, 3), (4, 5), (1, 2), (3, 6),( 1, 2), (1, 3), (4, 5), (1, 2), (3, 6), (1, 2), (1, 3), (4, 5), (1, 2), (3, 6),( 1, 2), (1, 3), (4, 5), (1, 2), (3, 6)
 

Het gaat om veel meer dan de korte rij met events zoals in eerste suggestie werd gegeven, Kortom, het volgende houdt me nu weer van de straat ;-)

Het gaat om een lange rij records, nl.1.200.000.000 events. Waarbij in zijn algemeenheid telkens id_n een event heeft met id_m. Het eerste record is dan dat id_1 met  id_2 een event heeft, vervolgens een ander id_3 met weer een nieuwe id_4 een event , .... (de events staan in tijdsvolgorde).Na pak m beet x events is er weer id_1 die een event heeft, maar nu met id_7  en na y events weer eens id_1 maar nu weer met id_2. Nu gaat de teller voor de eventrelatie id_1:id_2 van 1 naar 2 (immers tweede keer) Kortom het zijn events van twee id_'s met voor alle id_n:id_m relaties éénmaal een geheel nieuw karakter (dan is het de eerste keer dat id_n een event heeft met id_m) en voor een deel hiervan ook een terugkerend karakter (twee id_'s hebben dan al eens een of meer event (s) gedeeld met elkaar) .

Het is niet te doen om alle mogelijke relaties uit te schrijven, er zijn 1.000.000 verschillende id_'s die met allen (behalve zichzelf ) een event-relatie kunnen hebben. Verder:

- sommige relaties van id_n met  id_m komen in het hele bestand slechts één keer voor, andere komen tot wel 40 keer voor.

- de teller die ik wil hebben houdt bij hoe vaak een relatie van id_n:id_m voorkomt in de rij.

- verder wil ik een beschrijving van de id_n:id_m eventrelaties die >10 zijn. Dus: welke tijdstippen horen bij reeks id_n:id_m eventrelaties , etc?

Voor nu vooral mijn vraag: hoe laat ik een teller bijhouden per iedere relatie id_n:id_m op zijn frequentie van eventvoorkomen in de hele rij, waarbij de eventrelatie eerst zelf geïdentificeerd dient te worden?

Ben benieuwd, al bedankt bij voorbaat !

Groeten

Sjef

Hugo KornelisUser is Offline

Posts:46

22-09-2010 11:46:36 Alert 
Beste Sjef,

Ik moet je eerlijk bekennen dat ik na drie keer lezen van je beschrijving nog steeds niet echt snap wat je bedoelt.
Zou je alsjeblieft de volgende gegevens in een antwoord willen zetten:
* De structuur van je tabel (of tabellen), in de vorm van een CREATE TABLE opdracht. Graag inclusief alle constraints. Kolommen die niet van belang zijn mag je eventueel weglaten.
* Een beperkte set gegevens die groot genoeg is om het probleem te illustreren (dus niet de volledige gegevens, ook niet noodzakelijk echte gegevens, maar wel een aantal voorbeelden van rijen en combinaties van rijen die niet of juist wel in de uitvoer moeten komen). Deze testgegevens graag in de vorm van INSERT opdrachten - ik heb geen zin om een half uur of langer bezig te zijn met een lijst gegevens over te typen.
* De gewenste uitvoer op basis van de gegeven testset. Dit mag je gewoon in tabelvorm of in een beschrijving in je antwoord opnemen.

Op basis van die informatie is de kans dat iemand je kan helpen veel groter dan op basis van de ingewikkelde beschrijving die je nu hebt neergezet.

Met vriendelijke groeten,

Hugo Kornelis (SQL Server MVP)
You are not authorized to post a reply.
Forums > Forums > Ontwikkelen > koppelen van id's op basis van events



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use