sql >> Databasteknik >  >> RDS >> Mysql

Hur grupperar jag efter vecka i MySQL?

Du kan använda både YEAR(tidsstämpel) och WEEK(timestamp ) , och använd båda dessa uttryck i SELECT och GROUP BY klausul.

Inte alltför elegant, men funktionell...

Och naturligtvis kan du kombinera dessa två datumdelar i ett enda uttryck också, alltså något liknande

SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))

Redigera :Som Martin påpekar du kan också använda YEARWEEK(mysqldatefield) funktion, även om dess utdata inte är lika ögonvänlig som den längre formeln ovan.

Redigera 2 [3 1/2 år senare!]:
YEARWEEK(mysqldatefield) med det valfria andra argumentet (läge ) satt till antingen 0 eller 2 är förmodligen det bästa sättet att aggregera genom att komplett veckor (dvs. inklusive för veckor som sträcker sig över 1 januari), om det är vad som önskas. YEAR()/WEEK() tillvägagångssätt som ursprungligen föreslogs i detta svar har effekten att dela upp den aggregerade informationen för sådan "gränsöverskridande" veckor i två:en med det förra året, en med det nya året.
En ren klippning varje år, till priset av att ha upp till två delveckor, en i vardera änden, är ofta önskvärt i bokföring etc. och för det YEAR() / WEEK() tillvägagångssätt är bättre.



  1. Beräkna percentil från frekvens i MySQL

  2. Forskar om PostGIS långsamhet (2019 års upplaga)

  3. Dela upp stora raderingsoperationer i bitar

  4. Python REST API:er med kolv, anslutning och SQLAlchemy – Del 3