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

Hvordan grupperer jeg efter uge i MySQL?

Du kan bruge både ÅR(tidsstempel) og WEEK(timestamp ) , og brug begge disse udtryk i SELECT og GROUP BY klausul.

Ikke alt for elegant, men funktionel...

Og du kan selvfølgelig også kombinere disse to datodele i et enkelt udtryk, altså noget i stil med

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

Rediger :Som Martin påpeger du kan også bruge ÅR UGE(mysqldatefield) funktion, selvom dens output ikke er så øjenvenlig som den længere formel ovenfor.

Rediger 2 [3 1/2 år senere!]:
YEARWEEK(mysqldatefield) med det valgfrie andet argument (tilstand ) sat til enten 0 eller 2 er sandsynligvis den bedste måde at aggregere ved at fuldføre uger (dvs. inklusive for uger, der strækker sig over 1. januar), hvis det er det, der ønskes. ÅR() / UGE() tilgang, der oprindeligt blev foreslået i dette svar, har den virkning, at de aggregerede data for en sådan "grænseflade" opdeles uger i to:en med det tidligere år, en med det nye år.
Et rent snit hvert år, på bekostning af at have op til to deluger, en i hver ende, ønskes ofte i regnskab mv. og for det YEAR() / WEEK() tilgang er bedre.



  1. Skift separatoren til et komma, når du sender forespørgselsresultater via e-mail i SQL Server (T-SQL)

  2. MySQL 8.0 - Klienten understøtter ikke godkendelsesprotokol anmodet af serveren; overveje at opgradere MySQL-klienten

  3. Hvordan kan jeg forhindre Postgres i at indsætte en underforespørgsel?

  4. Rækkemål, del 2:Semi-joins