Maison > base de données > tutoriel mysql > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-08 20:26:02
original
469 Les gens l'ont consulté

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
Copier après la connexion

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)
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!