Maison >base de données >tutoriel mysql >Comment récupérer efficacement le premier et le dernier enregistrement de données groupées dans MySQL ?

Comment récupérer efficacement le premier et le dernier enregistrement de données groupées dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-08 20:26:02560parcourir

How to Efficiently Retrieve First and Last Records of Grouped Data in MySQL?

Récupération du premier et du dernier enregistrement de données groupées avec des fonctions d'agrégation dans MySQL

Dans MySQL, lors de la récupération de données à partir d'enregistrements groupés à l'aide de fonctions d'agrégation, il peut être difficile de récupérer le premier et le dernier enregistrement du groupe. Bien que plusieurs requêtes puissent y parvenir, cela peut s'avérer inefficace pour les grandes tables.

Pour optimiser ce processus, MySQL propose une solution plus efficace en utilisant les fonctions GROUP_CONCAT et SUBSTRING_INDEX .

Utilisation de GROUP_CONCAT et SUBSTRING_INDEX

En utilisant ces fonctions ensemble, vous pouvez concaténer les valeurs du groupe, puis extraire la première et la dernière valeurs à l'aide de SUBSTRING_INDEX. Voici comment :

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

Comment ça marche :

  • GROUP_CONCAT concatène toutes les valeurs d'ouverture ou de fermeture en une seule chaîne, triés par date/heure column.
  • SUBSTRING_INDEX extrait la première et la dernière valeurs de la chaîne concaténée en la divisant par la virgule (','). L'argument « 1 » indique la première ou la dernière occurrence.

Exemple :

Considérez la requête suivante :

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)

Ceci La requête récupère efficacement les premiers enregistrements (ouverts) et derniers (fermés) de chaque groupe, minimisant ainsi le temps de traitement pour les grandes tables.

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