Récupération du premier et du dernier enregistrement à partir de résultats groupés dans MySQL
Dans MySQL, récupérer le premier et le dernier enregistrement d'un ensemble de résultats groupés tout en l'application de fonctions d'agrégation peut être difficile. Considérez 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 regroupe les données par semaine et calcule le prix minimum bas, le prix maximum élevé, les valeurs d'ouverture et de clôture pour chaque semaine. Cependant, elle ne fournit pas le premier et le dernier enregistrements au sein de chaque groupe.
Pour y parvenir, une approche consiste à utiliser les fonctions GROUP_CONCAT et SUBSTRING_INDEX :
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 solution permet de concaténez toutes les valeurs d'ouverture et de fermeture de chaque groupe, séparées par des virgules, puis extrayez la première et la dernière valeur à l'aide de SUBSTRING_INDEX. Cette approche évite les sous-requêtes coûteuses et peut être plus efficace pour ce problème spécifique.
Référez-vous à la documentation MySQL pour plus d'informations sur les fonctions GROUP_CONCAT et SUBSTRING_INDEX. De plus, vous pouvez explorer d'autres options telles que l'utilisation de fonctions de fenêtre ou de fonctions définies par l'utilisateur, en fonction des exigences spécifiques de votre requête.
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!