sql >> Database teknologi >  >> RDS >> Mysql

Grupper for uge i MySQL

To trin til dette:

For det første skal du bruge en uge-truncate-operation -- som vil tage din DATETIME genstand og giv midnat tilbage den foregående søndag (hvis din forretningsregel siger, at ugen begynder på søndag).

Det bliver en passende GROUP BY-vare. WEEK() / YEAR() hacket er ikke egnet til dette. Det gør virkelig noget rod i den sidste/første uge af hvert år.

Det er min erfaring, at dette udtryk vil gøre det ugentlige trick for dig, søndag - lørdag,

  FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))

For at få mandag - søndag uger, brug dette udtryk.

  FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))

Så du kan gøre dette.

  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))

Hvordan grupperes efter uge i MySQL?

For det andet skal du tilføje seks dage til den trunkerede dato, så du kan vise den sidste dag i hver uge sammen med den første dag.

Dette er en god måde at gøre det på, med en indlejret forespørgsel

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

Gør du meget af dette? Jeg foreslår, at du opretter en lagret TRUNC_WEEK funktion.




  1. Skift decimalseparator i MySQL

  2. Sådan beregnes median i MySQL

  3. Installer mysqldb på sneleopard

  4. Hvordan transformerer jeg sql-forespørgselsresultater til pivottabel ved hjælp af php-arrays?