sql >> Databáze >  >> RDS >> Mysql

Jak seskupit podle týdne v MySQL?

Můžete použít obě YEAR(timestamp) a WEEK(timestamp) a oba tyto výrazy použijte v SELECT a GROUP BY doložka.

Ne přehnaně elegantní, ale funkční...

A samozřejmě můžete tyto dvě části data spojit také do jediného výrazu, tedy něco jako

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

Upravit :Jak Martin upozorňuje můžete také použít YEARWEEK(mysqldatefield) funkce, ačkoli její výstup není tak příjemný pro oči jako delší vzorec výše.

Úprava 2 [3 1/2 roku později!]:
YEARWEEK(mysqldatefield) s volitelným druhým argumentem (mode ) nastavená na 0 nebo 2 je pravděpodobně nejlepší způsob agregace podle úplného týdnů (tj. včetně týdnů, které přesahují 1. leden), pokud je to žádoucí. YEAR() / WEEK() přístup původně navržený v této odpovědi má za následek rozdělení agregovaných dat pro takové "rozkročení" týdny ve dvou:jeden s předchozím rokem, jeden s novým rokem.
Čistý řez každý rok za cenu až dvou dílčích týdnů, jeden na každém konci, je často požadován v účetnictví atd. a k tomu YEAR() / WEEK() přístup je lepší.



  1. Jak funguje Div() v PostgreSQL

  2. Vrátit řádek s maximální hodnotou jednoho sloupce na skupinu

  3. Autoinkrementační sloupec MySQL poskočí o 10 – proč?

  4. SQL Alter Table