|
| 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.
| |
|
|