Maison  >  Article  >  base de données  >  Comment puis-je récupérer le premier et le dernier enregistrement à partir de requêtes agrégées groupées dans MySQL ?

Comment puis-je récupérer le premier et le dernier enregistrement à partir de requêtes agrégées groupées dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-08 01:50:02850parcourir

How Can I Fetch the First and Last Records From Grouped Aggregate Queries in MySQL?

Récupération du premier et du dernier enregistrement à partir de requêtes agrégées groupées dans MySQL

Dans les opérations de base de données, il est souvent nécessaire de récupérer non seulement les valeurs agrégées, mais également informations spécifiques sur le premier et le dernier enregistrements d’un ensemble groupé. Imaginons un scénario dans lequel nous récupérons des données agrégées pour un ensemble de valeurs regroupées par une période de temps spécifique, telle qu'une semaine ou une année, et souhaitons récupérer les valeurs d'ouverture et de clôture pour chaque groupe.

Pour y parvenir Ceci, nous pourrions dans un premier temps penser à émettre plusieurs requêtes individuelles pour chaque groupe à l'aide de sous-requêtes. Cependant, cette approche n’est pas optimale, en particulier pour les grands ensembles de données. MySQL propose des solutions efficaces pour de tels scénarios en utilisant des fonctions d'agrégation en conjonction avec des fonctions supplémentaires de filtrage et de manipulation de données.

Pour récupérer le premier et le dernier enregistrement de chaque groupe, nous pouvons exploiter les fonctions GROUP_CONCAT et SUBSTRING_INDEX. GROUP_CONCAT nous permet de concaténer les valeurs d'une colonne spécifiée au sein de chaque groupe, et SUBSTRING_INDEX nous permet d'extraire la première ou la dernière sous-chaîne en fonction d'un délimiteur.

Par exemple, pour récupérer les valeurs d'ouverture et de fermeture de chaque semaine annuelle, nous modifions notre requête comme suit :

SELECT MIN(low_price), MAX(high_price),
SUBSTRING_INDEX(GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1) AS open,
SUBSTRING_INDEX(GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1) AS close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)

Cette requête regroupe les données par semaine annuelle et calcule le prix bas minimum et le prix élevé maximum. De plus, il utilise GROUP_CONCAT pour concaténer toutes les valeurs ouvertes de chaque groupe, triées par date/heure dans l'ordre croissant, et SUBSTRING_INDEX pour extraire le premier enregistrement comme valeur d'ouverture. De même, il concatène toutes les valeurs proches par ordre décroissant et extrait le dernier enregistrement comme valeur de clôture pour chaque groupe.

En utilisant ces fonctions, nous évitons le besoin de sous-requêtes et de traitements coûteux, ce qui permet d'obtenir un résultat plus rapide et plus efficace. requêtes, en particulier lorsque vous travaillez avec de grands ensembles de données.

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!

Déclaration:
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