Voor een rating rapportage tool wil ik de Top 5 ratingscore per maand tonen van records die gerate zijn.
Met de functie date_trunc kan ik de maand van de rating timestamp en daarmee groeperen, maar ik kan er geen Top 5 resultaten per maand eruit krijgen. Ik zie iets over het hoofd, maar wat?
Ik zal een paar voorbeelden geven:
Tabel rating:
Etc. etc...
Het resultaat is dan bijvoorbeeld:
Ok, het resultaat per maand met unieke content_id's klopt, maar ik wil alleen de eerste 5 records van elke maand. Met LIMIT 5 krijg ik alleen de eerste 5 rows van het hele resultaat. Met HAVING COUNT(DISTINCT truncate) <= 5 gebeurt er niets met het resultaat
Wat doe ik verkeerd?
Alvast bedankt!
Met de functie date_trunc kan ik de maand van de rating timestamp en daarmee groeperen, maar ik kan er geen Top 5 resultaten per maand eruit krijgen. Ik zie iets over het hoofd, maar wat?
Ik zal een paar voorbeelden geven:
Tabel rating:
rating_create | content_id | score |
---|---|---|
2009-12-01 09:12:12 | 10 | 4 |
2009-12-05 10:12:12 | 10 | 4 |
2009-12-17 11:12:12 | 10 | 3 |
2009-12-10 12:12:12 | 10 | 3 |
2009-12-21 13:12:12 | 10 | 2 |
2009-12-15 14:12:12 | 10 | 5 |
2009-12-11 15:12:12 | 17 | 3 |
2009-12-20 16:12:12 | 17 | 5 |
2009-12-01 17:12:12 | 10 | 4 |
2009-12-05 18:12:12 | 10 | 4 |
2010-01-17 19:12:12 | 12 | 3 |
2010-01-10 20:12:12 | 12 | 3 |
2010-01-21 21:12:12 | 15 | 2 |
2010-01-15 22:12:12 | 15 | 5 |
2010-01-11 23:12:12 | 17 | 3 |
2010-01-20 24:12:12 | 17 | 5 |
Etc. etc...
SQL:
1
2
3
4
| SELECT to_char(date_trunc('month',rating_create),'YYYY-MM-DD') AS trunc, content_id, AVG(score) AS score, COUNT(rating_id) AS votes FROM trunc GROUP BY dates, content_id ORDER BY dates, score DESC, votes DESC |
Het resultaat is dan bijvoorbeeld:
trunc | content_id | score | votes |
---|---|---|---|
2009-01-01 | 23 | 4.9 | 122 |
2009-01-01 | 24 | 4.1 | 144 |
2009-01-01 | 25 | 4.1 | 133 |
2009-01-01 | 26 | 3.6 | 155 |
2009-01-01 | 27 | 3.4 | 166 |
2009-01-01 | 28 | 3.1 | 177 |
2009-01-01 | 29 | 3.0 | 188 |
2010-01-01 | 20 | 4.5 | 90 |
2010-01-01 | 21 | 4.1 | 100 |
2010-01-01 | 22 | 4.0 | 110 |
2010-01-01 | 23 | 3.9 | 120 |
2010-01-01 | 24 | 3.4 | 130 |
2010-01-01 | 25 | 3.0 | 140 |
2010-01-01 | 26 | 2.8 | 150 |
2010-01-01 | 27 | 2.7 | 160 |
2010-01-01 | 28 | 1.8 | 170 |
Ok, het resultaat per maand met unieke content_id's klopt, maar ik wil alleen de eerste 5 records van elke maand. Met LIMIT 5 krijg ik alleen de eerste 5 rows van het hele resultaat. Met HAVING COUNT(DISTINCT truncate) <= 5 gebeurt er niets met het resultaat
Alvast bedankt!