Toon posts:

[sql] GROUP BY aanpassing nodig

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,
Onderstaande query geeft nog niet de juiste output,
code:
1
2
3
4
5
SELECT   TOP 2  commForumHoofd.id_forum, commForumHoofd.titel, commForumReactie.datum_aanmaak, commForumReactie.naam
FROM         commForumHoofd 
INNER JOIN commForumReactie ON commForumHoofd.id_forum = commForumReactie.forumID
GROUP BY commForumHoofd.id_forum, commForumReactie.datum_aanmaak, commForumHoofd.titel, commForumReactie.naam
ORDER BY commForumReactie.datum_aanmaak DESC

Nu is het resultaat de laatste twee records waar een reactie is geplaatst (datum selectie) De enige aanpassing die ik nog wil is dat hij de laatste twee records laat zien van verschillende commForumHoofd.id_forum.

Ik dacht dit te kunnen doen door allen een group by op commForumHoofd.id_forum te laten uitvoeren maar dat wordt niet geaccepteerd.

Iemand een suggestie?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:54
Een group by moet je enkel doen als je aggregate functies gebruikt, en dan moet je groeperen op alle columns in je select list die geen aggregaat zijn.
Aangezien jij geen aggregate doet, is een group by hier dus ook niet van doen.

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Wil je nu voor iedere commForumHoofd.id_forum de laatste 2 records?

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Ik wil op basis van de laatst toegevoegde reactie (commForumReactie.datum_aanmaak) twee records (commForumHoofd.id_forum) terugkrijgen. Het moeten echter wel twee verschillende records(commForumHoofd.id_forum) zijn. De meest recente hoofditems weergeven op basis van geplaatste reacties binnen de hoofditems. In het geval de laatste twee reacties op basis van de datum in hetzelfde hoofditem geplaatst zijn zou ik twee maal het id van het hoofditem terugkrijgen, dat wil ik niet. Vandaar dat ik een group by wil doen op basis van commForumHoofd.id_forum

Verwijderd

Topicstarter
whoami schreef op vrijdag 26 augustus 2005 @ 13:49:
Een group by moet je enkel doen als je aggregate functies gebruikt, en dan moet je groeperen op alle columns in je select list die geen aggregaat zijn.
Aangezien jij geen aggregate doet, is een group by hier dus ook niet van doen.
Klopt, maar ik weet niet hoe ik anders twee verschillende commForumHoofd.id_forum records te pakken krijg...

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL:
1
2
3
4
5
6
7
8
SELECT      H.id_forum, H.titel, R.datum_aanmaak, R.naam
FROM        commForumHoofd    H 
INNER JOIN  commForumReactie R ON H.id_forum = R.forumID
INNER JOIN (    SELECT TOP 2 id_forum, MAX(datum_aanmaak) as datum_aanmaak 
            FROM commForumHoofd 
        INNER JOIN commForumReactie ON id_forum = forumID
        GROUP BY id_forum)sub 
            ON sub.id_forum = H.id_forum and sub.datum_aanmaak = r.datum_aanmaak


Dit geeft alleen wel problemen als meerdere reacties in dezelfde id_forum dezelfde datum hebben. Je krijgt dan nu meer dan 2 records. Als je dat niet wilt moet je nog bepalen welke van de reacties met dezelfde datum je wilt hebben.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op vrijdag 26 augustus 2005 @ 14:36:
SQL:
1
2
3
4
5
6
7
8
SELECT      H.id_forum, H.titel, R.datum_aanmaak, R.naam
FROM        commForumHoofd    H 
INNER JOIN  commForumReactie R ON H.id_forum = R.forumID
INNER JOIN (    SELECT TOP 2 id_forum, MAX(datum_aanmaak) as datum_aanmaak 
            FROM commForumHoofd 
        INNER JOIN commForumReactie ON id_forum = forumID
        GROUP BY id_forum)sub 
            ON sub.id_forum = H.id_forum and sub.datum_aanmaak = r.datum_aanmaak


Dit geeft alleen wel problemen als meerdere reacties in dezelfde id_forum dezelfde datum hebben. Je krijgt dan nu meer dan 2 records. Als je dat niet wilt moet je nog bepalen welke van de reacties met dezelfde datum je wilt hebben.
Bedankt P-D-B,
Moest het wel even 4 keer lezen voordat ik begreep wat je van plan was 8)7 . Ik krijg wel een foutmelding: ambiguous column name 'datum_aanmaak'. Ik heb in de tweede select max(commForumReactie.datum.aanmaak) veranderd. Het werkt nu prima! _/-\o_

[ Voor 11% gewijzigd door Verwijderd op 26-08-2005 15:12 ]

Pagina: 1