Search code examples
sqlrecords

last 4 weeks records group by week


How to get count (last 4 weeks records and week range) group by week range?

Week range means 22-28, 15-21,8-14, 1-7

I tried this

SELECT WEEK(PERIOD), SUM(CLICKS)
  FROM TABLE
 WHERE PERIOD >= NOW() - INTERVAL 4 WEEK
 GROUP BY WEEK(PERIOD)

and

SELECT WEEKOFYEAR(`date`) AS period,
       SUM(clicks) AS clicks
  FROM `tablename`
 WHERE `date` >= CURDATE() - INTERVAL 4 WEEK
 GROUP BY period

Solution

  • If you mean last 4 weeks by exactly each 7 x 24 days prior to today, up to the second, then

    SELECT CASE WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                        AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'
                   WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                        AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'
                   WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
                        AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '8-14 days ago'
                   WHEN PERIOD >= NOW() - INTERVAL 1 WEEK
                        THEN 'up to 7 days ago'
                   END WeekPeriod, IFNULL(SUM(CLICKS),0) TotalClicks
      FROM TABLE
     WHERE PERIOD >= NOW() - INTERVAL 4 WEEK
     GROUP BY CASE WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                        AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'
                   WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                        AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'
                   WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
                        AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '08-14 days ago'
                   WHEN PERIOD >= NOW() - INTERVAL 1 WEEK
                        THEN '01 to 7 days ago'
                   END
     ORDER BY WeekPeriod