Maison > base de données > tutoriel mysql > Comment regrouper efficacement les données de séries chronologiques par semaine dans MySQL ?

Comment regrouper efficacement les données de séries chronologiques par semaine dans MySQL ?

DDD
Libérer: 2024-12-13 06:02:10
original
642 Les gens l'ont consulté

How to Efficiently Group Time-Series Data by Week in MySQL?

Regroupement des données par semaine dans MySQL

Lorsque vous traitez des données de séries chronologiques, il est souvent utile de regrouper les enregistrements par semaine. Alors qu'Oracle propose des fonctions intégrées à cet effet, MySQL nécessite une approche légèrement différente.

Troncation des jours de la semaine

Pour tronquer un horodatage à minuit le dimanche précédent, comme effectué dans Oracle en utilisant TRUNC(timestamp,'DY'), MySQL ne propose pas d'équivalent direct. Cependant, vous pouvez émuler ce comportement en utilisant l'expression suivante :

DATE_ADD(DATE(timestamp), INTERVAL (DAYOFWEEK(timestamp) - 7) DAY)
Copier après la connexion

Cette expression soustrait le jour de la semaine en cours de l'horodatage, ce qui donne une date correspondant au dimanche précédent.

Troncation du mois

Pour tronquer un horodatage à minuit le premier jour du mois, MySQL fournit la méthode simple Fonction DATE_FORMAT(timestamp, '%Y-%m-01'), qui est similaire à TRUNC(timestamp,'MM') d'Oracle.

Troncation de la semaine

Bien que MySQL ait la fonction WEEK(timestamp), elle renvoie le numéro de la semaine dans l'année. Pour regrouper par semaines complètes, plutôt que par numéros de semaine, vous pouvez combiner YEAR(timestamp) et WEEK(timestamp) dans les clauses SELECT et GROUP BY, comme suit :

SELECT YEAR(timestamp), WEEK(timestamp)
FROM ...
WHERE ...
GROUP BY YEAR(timestamp), WEEK(timestamp)
Copier après la connexion

Vous pouvez également utiliser YEARWEEK (mysqldatefield), qui renvoie le numéro combiné de l'année et de la semaine. Cependant, sa sortie peut ne pas être aussi conviviale que l'approche YEAR(timestamp) / WEEK(timestamp).

Remarque : Pour l'agrégation par semaines complètes, y compris celles qui s'étendent sur janvier Tout d'abord, envisagez d'utiliser YEARWEEK(mysqldatefield) avec le deuxième argument (mode) défini sur 0 ou 2.

Exemple :

La requête suivante regroupe les données par semaines complètes :

SELECT YEARWEEK(timestamp, 0) AS week_number, SUM(value) AS total
FROM data
WHERE ...
GROUP BY week_number
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal