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 :
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!