Récupération du premier et du dernier enregistrements de lignes groupées avec des fonctions d'agrégation dans MySQL
En SQL, les fonctions d'agrégation permettent une synthèse efficace des données entre les groupes . Cependant, lorsqu'ils rencontrent des enregistrements groupés, les utilisateurs peuvent rencontrer des difficultés pour récupérer le premier et le dernier enregistrement de chaque groupe. Cela devient particulièrement pertinent lorsque vous travaillez avec de grandes tables.
Considérez la requête suivante :
SELECT MIN(low_price), MAX(high_price), open, close FROM symbols WHERE date BETWEEN(.. ..) GROUP BY YEARWEEK(date)
Bien que cette requête fournisse des statistiques globales pour chaque groupe (telles que les prix minimum et maximum), elle le fait ne fournit pas les premier et dernier enregistrements pour chaque semaine. Pour répondre à ce besoin, MySQL propose plusieurs approches.
Utilisation de GROUP_CONCAT et SUBSTRING_INDEX
Une technique efficace consiste à exploiter les fonctions GROUP_CONCAT et SUBSTRING_INDEX. GROUP_CONCAT concatène les valeurs spécifiées au sein d'un groupe, séparées par un délimiteur. SUBSTRING_INDEX, à son tour, extrait les sous-chaînes des chaînes concaténées.
Voici comment nous pouvons utiliser ces fonctions pour obtenir les résultats souhaités :
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
Cette approche élimine le besoin de sous-requêtes coûteuses et s'avère hautement efficace pour de tels scénarios spécifiques.
Pour plus d'informations sur GROUP_CONCAT et SUBSTRING_INDEX fonctions, reportez-vous à la documentation officielle de MySQL.
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!