"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-16
Parcourir:882

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 .

À l'aide 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ées par colonne datetime.
  • SUBSTRING_INDEX extrait la première et la dernière valeur de la chaîne concaténée en la divisant à 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)

Cette 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3