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

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

DDD
DDDoriginal
2024-11-08 19:16:021047parcourir

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

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

Lorsque vous traitez des données groupées dans MySQL, il peut être nécessaire d'accéder les premier et dernier enregistrements de chaque groupe. Par exemple, considérons la requête suivante :

SELECT MIN(low_price), MAX(high_price), open, close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)

Cette requête récupère le prix minimum bas, le prix maximum haut, les prix d'ouverture et de clôture pour chaque semaine de l'année. Cependant, si l'objectif est d'obtenir le premier et le dernier enregistrement de chaque groupe, la requête ci-dessus est insuffisante.

Solution

Pour y parvenir, on peut utiliser la Fonctions GROUP_CONCAT et SUBSTRING_INDEX. La requête suivante modifie la requête d'origine pour inclure des colonnes pour le premier et le dernier cours d'ouverture :

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)

Explication

  • GROUP_CONCAT : Concatène les valeurs du colonne spécifiée (par exemple, ouverte) dans chaque groupe, séparée par un virgule.
  • SUBSTRING_INDEX : extrait la sous-chaîne avant ou après l'occurrence spécifiée d'un délimiteur (dans ce cas, une virgule).

En utilisant ces fonctions, la requête récupère efficacement le premier cours d'ouverture et dernier cours de clôture pour chaque groupe. Cette approche évite le besoin de plusieurs sous-requêtes et offre une solution performante pour récupérer les données souhaité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