Ik kom niet uit een SQL query die simpel zou moeten zijn.
Ik heb twee tabellen:
Tabel bedrijven
Tabel bedrijven_nieuws
Nu wil ik de laatste nieuwsberichten tonen, maar één per bedrijf en wel het nieuwste bericht van het bedrijf. De query zou op basis van bonvenstaande tabelinhoud het volgende moeten geven:
(meegenomen dat het bedrijf Microsoft niet online is.)
Als je alleen naar de nieuwsberichten kijkt, dan kom ik tot de volgende query:
Ik wil de berichten gegroepeerd op bedrijf_id, maar alle kolommen die in de SELECT staan zonder aggregatie moeten in de GROUP BY.
Met die kolommen krijg ik echter dubbele bedrijf_id in de resultset.
Met subqueries heb ik geprobeerd de bedrijfsnaam bij de berichten te zoeken, maar als het simpele groeperen al mislukt schiet dat niet erg op.
Wat doe ik fout en snap ik GROUP BY toch niet helemaal?
Ik heb twee tabellen:
Tabel bedrijven
| id | naam | online |
| 1 | 1 | |
| 2 | Microsoft | 0 |
| 3 | Sun | 1 |
Tabel bedrijven_nieuws
| id | bedrijf_id | titel | bericht | datum |
| 1 | 1 | Google aandelen omhoog | ... | 2007-11-15 |
| 2 | 1 | Google aandelen omlaag | ... | 2007-11-14 |
| 3 | 2 | Mircrosoft aandelen omlaag | ... | 2007-11-14 |
| 4 | 3 | Sun aandelen omlaag | ... | 2007-11-15 |
| 5 | 3 | Sun aandelen omhoog | ... | 2007-11-14 |
Nu wil ik de laatste nieuwsberichten tonen, maar één per bedrijf en wel het nieuwste bericht van het bedrijf. De query zou op basis van bonvenstaande tabelinhoud het volgende moeten geven:
| bedrijfsnaam | titel | bericht | datum |
| Google aandelen omhoog | ... | 2007-11-15 | |
| Sun | Sun aandelen omlaag | ... | 2007-11-15 |
(meegenomen dat het bedrijf Microsoft niet online is.)
Als je alleen naar de nieuwsberichten kijkt, dan kom ik tot de volgende query:
SQL:
1
2
3
4
5
6
7
| SELECT id, titel, bericht, MAX(datum) AS datum FROM bedrijven_nieuws GROUP BY bedrijf_id, id, titel, bericht ORDER BY datum DESC |
Ik wil de berichten gegroepeerd op bedrijf_id, maar alle kolommen die in de SELECT staan zonder aggregatie moeten in de GROUP BY.
Met die kolommen krijg ik echter dubbele bedrijf_id in de resultset.
Met subqueries heb ik geprobeerd de bedrijfsnaam bij de berichten te zoeken, maar als het simpele groeperen al mislukt schiet dat niet erg op.
Wat doe ik fout en snap ik GROUP BY toch niet helemaal?