Dva kroky k tomu:
Za prvé, potřebujete týdenní operaci zkrácení -- to bude trvat DATETIME
položku a vrátit půlnoc předchozí neděle (pokud vaše obchodní pravidlo říká, že týden začíná v neděli).
To se stane vhodnou položkou GROUP BY. Hack WEEK() / YEAR() k tomu není vhodný. Poslední/první týden každého roku to opravdu dělá nepořádek.
Podle mých zkušeností vám tento výraz udělá trik se zkrácením týdne, neděle – sobota,
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))
Chcete-li získat týdny pondělí až neděle, použijte tento výraz.
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))
Takže to můžete udělat.
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))
Jak seskupit podle týdne v MySQL?
Za druhé, musíte k tomuto zkrácenému datu přidat šest dní, abyste mohli zobrazit poslední den každého týdne spolu s prvním dnem.
Je to dobrý způsob, jak toho dosáhnout, pomocí vnořeného dotazu
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
Děláte toho hodně? Navrhuji, abyste si vytvořili uložený TRUNC_WEEK
funkce.