Twee stappen hiertoe:
Ten eerste heb je een week-afkapbewerking nodig -- dat kost je DATETIME
item en geef de vorige zondag middernacht terug (als uw bedrijfsregel zegt dat de week op zondag begint).
Dat wordt een geschikt GROUP BY item. De WEEK() / YEAR() hack is hier niet geschikt voor. Het maakt echt een puinhoop in de laatste/eerste week van elk jaar.
In mijn ervaring zal deze uitdrukking de week-afkap-truc voor je doen, zondag - zaterdag,
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))
Gebruik deze uitdrukking om maandag - zondag weken te krijgen.
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))
Dus je kunt dit doen.
SELECT COUNT(whatever), SUM(whatelse),
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) as WEEKSTART,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
Hoe groeperen op week in MySQL?
Ten tweede moet je zes dagen toevoegen aan die ingekorte datum, zodat je de laatste dag van elke week samen met de eerste dag kunt weergeven.
Dit is een goede manier om dat te doen, met een geneste zoekopdracht
SELECT whats, elses, weekstart, weekstart + INTERVAL 6 DAY AS weekend
FROM (
SELECT COUNT(whatever) AS whats, SUM(whatelse) AS elses,
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) AS weekstart,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
) AS summary
ORDER BY weekstart
Doe je dit veel? Ik stel voor dat je een opgeslagen TRUNC_WEEK
. maakt functie.