Ik ben druk bezig met het schrijven van een leuk stukje SQL:
Het doel van deze sql is een resultaat dat te vergelijken is met de active topics op GoT. In de bovenstaande query heb ik overigens de onbelangrijke informatie weggelaten.
Het resltaat van bovenstaande query staat hieronder beschreven:
Nou ben ik zoals je ziet al een heel eind. Het enige wat nu nog dwars zit is het meerdere malen voorkomen van zowel titel als starter als first_date.
Dit is toe te schrijven aan de tweede inner join die verantwoordelijk is voor de laatste twee kolommen (last poster en last_date). Wat nu de bedoeling is:
Ik wil alleen het bovenste record van een rijtje terug zien (de bij elkaar horende records onderscheiden zich overigens door de kolom reply_id, daar wordt ook op gesorteerd zoals je ziet).
Ik kan me voorstellen dat de tweede inner join er ongeveer als volgt uit zou kunnen zien (onderstaande werkt uiteraard niet)
Het gewenste resultaat:
komt u maar
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| select t.title, s.user_id as starter, s.init_date as first_date, e.user_id as last_poster, e.init_date as last_date from thread t inner join message s on t.thread_id = s.thread_id and s.reply_id = 1 inner join message e on t.thread_id = e.thread_id group by t.thread_id, t.forum_id, t.title, t.interaction, t.type, s.reply_id, s.user_id, s.init_date, e.reply_id, e.user_id, e.init_date order by last_date desc, e.reply_id |
Het doel van deze sql is een resultaat dat te vergelijken is met de active topics op GoT. In de bovenstaande query heb ik overigens de onbelangrijke informatie weggelaten.
Het resltaat van bovenstaande query staat hieronder beschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
| t.title starter first_date last poster last_date Ervaringen volgelaats masker 32 2003-01-02 00:37:09.453 3 2003-01-05 10:28:27.107 Ervaringen volgelaats masker 32 2003-01-02 00:37:09.453 32 2003-01-04 22:40:18.893 Ervaringen volgelaats masker 32 2003-01-02 00:37:09.453 32 2003-01-04 22:34:44.153 Het gaat niet vanzelf hoor 3 2003-01-04 11:06:54.490 3 2003-01-04 11:06:54.490 Registreer knop............. 2 2003-01-02 23:59:48.893 3 2003-01-03 00:08:33.057 Registreer knop............. 2 2003-01-02 23:59:48.893 2 2003-01-02 23:59:48.893 Ervaringen volgelaats masker 32 2003-01-02 00:37:09.453 2 2003-01-02 22:44:59.667 Advanced open water boek 33 2003-01-02 12:08:07.567 2 2003-01-02 22:43:28.030 Forum namen............... 4 2003-01-02 02:42:58.557 3 2003-01-02 14:16:27.490 Forum namen................ 4 2003-01-02 02:42:58.557 4 2003-01-02 14:06:14.213 |
Nou ben ik zoals je ziet al een heel eind. Het enige wat nu nog dwars zit is het meerdere malen voorkomen van zowel titel als starter als first_date.
Dit is toe te schrijven aan de tweede inner join die verantwoordelijk is voor de laatste twee kolommen (last poster en last_date). Wat nu de bedoeling is:
Ik wil alleen het bovenste record van een rijtje terug zien (de bij elkaar horende records onderscheiden zich overigens door de kolom reply_id, daar wordt ook op gesorteerd zoals je ziet).
Ik kan me voorstellen dat de tweede inner join er ongeveer als volgt uit zou kunnen zien (onderstaande werkt uiteraard niet)
code:
1
| inner join message e on t.thread_id = e.thread_id and e.reply_id = max(e.reply_id) |
Het gewenste resultaat:
code:
1
2
3
4
5
6
| t.title starter first_date last poster last_date Ervaringen volgelaats masker 32 2003-01-02 00:37:09.453 3 2003-01-05 10:28:27.107 Het gaat niet vanzelf hoor 3 2003-01-04 11:06:54.490 3 2003-01-04 11:06:54.490 Registreer knop............. 2 2003-01-02 23:59:48.893 3 2003-01-03 00:08:33.057 Advanced open water boek 33 2003-01-02 12:08:07.567 2 2003-01-02 22:43:28.030 Forum namen............... 4 2003-01-02 02:42:58.557 3 2003-01-02 14:16:27.490 |
komt u maar
[ Voor 5% gewijzigd door Verwijderd op 05-01-2003 15:33 ]