/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Problem med SQL-sætning
Fra : Bent Jensen


Dato : 06-10-08 22:23

Hej NG

Jeg har et problem som jeg håber at i kan hjælpe mig med.

Jeg har to tabeller i min MSSQL database

Personer som indeholder
ID - int
Henviser - int
Henvist - int
Dato - datetime

Tid som indeholder
ID - int
Nummer - int
Tid - int
Dato - datetime

I tabellen Personer har jeg nogle henvisere, som har henvist nogle
henviste. Nogle af disse henviste, har så henvist nogle nye henviste,
og er dermed også selv blevet henvisere.

Så indholdet af tabellen kunne være
Henviser - Henvist
10000000 - 10000001
10000000 - 10000002
10000000 - 10000003
10000001 - 10000004
10000001 - 10000005
10000002 - 10000006
10000005 - 10000007
10000007 - 10000008
10000008 - 10000009


Tabellen Tid indeholder tid(i hele minutter) som hører til de numre
som er i Personer tabellens Henvist kolonne (så Henvist = Nummer)

Indholdet af tabellen kunne være
Tid - Nummer
100 - 10000000
150 - 10000001
100 - 10000002
500 - 10000003
200 - 10000004
300 - 10000005
100 - 10000006
200 - 10000007
150 - 10000008
400 - 10000009


Nu kommer så mit problem. Jeg skal have udvalgt summen af den tid som
hver henviser har i 4 leds dybde. Det vil sige at henviser 10000000
skal have summen af tiden for 10000001, 10000002 og 10000003, samt
10000004 og 10000005(som 10000001 har henvist), 10000006(som 10000002
har henvist), 10000007(som 10000005 har henvist), 10000008(som
10000007 har henvist), MEN IKKE 10000009, da dette er 5. led i kæden,
og heller ikke 10000000(som er henviseren selv).

Altså skal jeg have udtrukket Henviser 10000000 med tiden 1700.

Jeg skal have udtrukket summen af tiden for alle henvisere, men det er
ikke alle der har 4 led. Eks har 10000008 kun et led (10000009), og
dermed vil udtrækket blive Henviser 10000008 med tiden 400.

Jeg har efterhånden prøvet en del forskellige ting, men er ikke
rigtigt kommet frem til noget der virker. Med denne sql-sætning kan
jeg få udtrukket første led
SELECT Distinct(Personer.Henviser), SUM(Tid.Tid) AS Tiden,
Personer.Henvist FROM martin.Personer, martin.Tid WHERE
Personer.Henvist = Tid.Nummer GROUP BY Personer.Henviser,
Personer.Henvist ORDER BY Personer.Henviser

Her får jeg dog en lille fejl med, idet den første Henviser får
medregnet sin egen tid (og det skal den jo ikke)

Jeg kan ikke finde ud af hvordan jeg får udvalgt data ned til og med
led 4, og håber på at en af de kloge folk herinde kan hjælpe mig
videre.


 
 
Arne Vajhøj (06-10-2008)
Kommentar
Fra : Arne Vajhøj


Dato : 06-10-08 23:54

Bent Jensen (slet F8UNL) wrote:
> Jeg har et problem som jeg håber at i kan hjælpe mig med.
>
> Jeg har to tabeller i min MSSQL database
>
> Personer som indeholder
> ID - int
> Henviser - int
> Henvist - int
> Dato - datetime
>
> Tid som indeholder
> ID - int
> Nummer - int
> Tid - int
> Dato - datetime
>
> I tabellen Personer har jeg nogle henvisere, som har henvist nogle
> henviste. Nogle af disse henviste, har så henvist nogle nye henviste,
> og er dermed også selv blevet henvisere.
>
> Så indholdet af tabellen kunne være
> Henviser - Henvist
> 10000000 - 10000001
> 10000000 - 10000002
> 10000000 - 10000003
> 10000001 - 10000004
> 10000001 - 10000005
> 10000002 - 10000006
> 10000005 - 10000007
> 10000007 - 10000008
> 10000008 - 10000009
>
>
> Tabellen Tid indeholder tid(i hele minutter) som hører til de numre
> som er i Personer tabellens Henvist kolonne (så Henvist = Nummer)
>
> Indholdet af tabellen kunne være
> Tid - Nummer
> 100 - 10000000
> 150 - 10000001
> 100 - 10000002
> 500 - 10000003
> 200 - 10000004
> 300 - 10000005
> 100 - 10000006
> 200 - 10000007
> 150 - 10000008
> 400 - 10000009
>
>
> Nu kommer så mit problem. Jeg skal have udvalgt summen af den tid som
> hver henviser har i 4 leds dybde. Det vil sige at henviser 10000000
> skal have summen af tiden for 10000001, 10000002 og 10000003, samt
> 10000004 og 10000005(som 10000001 har henvist), 10000006(som 10000002
> har henvist), 10000007(som 10000005 har henvist), 10000008(som
> 10000007 har henvist), MEN IKKE 10000009, da dette er 5. led i kæden,
> og heller ikke 10000000(som er henviseren selv).
>
> Altså skal jeg have udtrukket Henviser 10000000 med tiden 1700.
>
> Jeg skal have udtrukket summen af tiden for alle henvisere, men det er
> ikke alle der har 4 led. Eks har 10000008 kun et led (10000009), og
> dermed vil udtrækket blive Henviser 10000008 med tiden 400.
>
> Jeg har efterhånden prøvet en del forskellige ting, men er ikke
> rigtigt kommet frem til noget der virker. Med denne sql-sætning kan
> jeg få udtrukket første led
> SELECT Distinct(Personer.Henviser), SUM(Tid.Tid) AS Tiden,
> Personer.Henvist FROM martin.Personer, martin.Tid WHERE
> Personer.Henvist = Tid.Nummer GROUP BY Personer.Henviser,
> Personer.Henvist ORDER BY Personer.Henviser
>
> Her får jeg dog en lille fejl med, idet den første Henviser får
> medregnet sin egen tid (og det skal den jo ikke)
>
> Jeg kan ikke finde ud af hvordan jeg får udvalgt data ned til og med
> led 4, og håber på at en af de kloge folk herinde kan hjælpe mig
> videre.

4 x LEFT SELF JOIN og samme GROUP BY bør kunne gøre det.

Arne

Michael Zedeler (07-10-2008)
Kommentar
Fra : Michael Zedeler


Dato : 07-10-08 22:30

Bent Jensen (slet F8UNL) wrote:
> Jeg har et problem som jeg håber at i kan hjælpe mig med.
>
> Jeg har to tabeller i min MSSQL database
>
> Personer som indeholder
> ID - int
> Henviser - int
> Henvist - int
> Dato - datetime

Hvis denne tabel virkelig indeholder personer, betyder det at hver
person kan kun henvise een anden person.

Er du sikker på at denne tabel ikke blot er en mange til mange-relation
imellem personer som ligger i en anden tabel?

Mvh. Michael.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste