Две стъпки към това:
Първо, имате нужда от операция за съкращаване на седмицата - това ще отнеме вашия DATETIME
артикул и върнете полунощ в предходната неделя (ако бизнес правилото ви казва, че седмицата започва в неделя).
Това става подходящ артикул ГРУПА ПО. Хакът WEEK() / YEAR() не е подходящ за това. Това наистина прави бъркотия през последната/първата седмица на всяка година.
Според моя опит този израз ще направи трик за съкращаване на седмицата вместо вас, неделя - събота,
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))
За да получите седмици от понеделник до неделя, използвайте този израз.
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))
Така че можете да направите това.
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))
Как да групирате по седмица в MySQL?
Второ, трябва да добавите шест дни към тази съкратена дата, за да можете да покажете последния ден от всяка седмица заедно с първия ден.
Това е добър начин да направите това с вложена заявка
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
Прави ли много от това? Предлагам ви да създадете съхранена TRUNC_WEEK
функция.