sql >> Database >  >> RDS >> Mysql

Hoe groeperen per week in MySQL?

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.



  1. Een gids voor PubNub-functies

  2. Hoe te selecteren uit MySQL waar Tabelnaam Variabel is

  3. Hoe op te lossen dat de coderingsfout niet kan worden gewijzigd bij het invoegen van XML in SQL Server

  4. Hoe voortschrijdend gemiddelde in roodverschuiving te berekenen