U kunt beide gebruiken JAAR(tijdstempel)
en WEEK(timestamp )
, en gebruik deze beide uitdrukkingen in de SELECT
en de GROUP BY
clausule.
Niet overdreven elegant, maar functioneel...
En natuurlijk kun je deze twee datumdelen ook combineren in een enkele uitdrukking, bijvoorbeeld zoiets als
SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))
Bewerken :Zoals Martin opmerkt
je kunt ook de JAARWEEK(mysqldatefield)
functie, hoewel de uitvoer niet zo oogvriendelijk is als de langere formule hierboven.
Bewerk 2 [3 1/2 jaar later!]:YEARWEEK(mysqldatefield)
met het optionele tweede argument (mode
) ingesteld op 0 of 2 is waarschijnlijk de beste manier om te aggregeren door voltooid weken (d.w.z. ook voor weken die zich over 1 januari uitstrekken), als dat is wat gewenst is. De JAAR() / WEEK()
benadering die aanvankelijk in dit antwoord werd voorgesteld, heeft tot gevolg dat de geaggregeerde gegevens voor dergelijke "straddling" worden gesplitst weken in twee:één met het vorige jaar, één met het nieuwe jaar.
Elk jaar een strakke snede, ten koste van maximaal twee gedeeltelijke weken, één aan beide uiteinden, is vaak gewenst in de boekhouding enz. en daarvoor de JAAR() / WEEK()
aanpak is beter.