Calcul des différences entre les lignes dans une instruction MySQL SELECT
Problème :
Comment déterminer la différence de valeurs entre deux lignes suivantes dans une instruction MySQL SELECT ? Le tableau fourni contient des données telles que les kilomètres, la date et l'identification de la voiture. Le but est de créer une vue qui comprend une colonne supplémentaire indiquant le nombre de kilomètres depuis la date précédente.
Solution :
Pour y parvenir, une combinaison de GAUCHE JOIN et la sous-requête sont utilisées. Le LEFT JOIN nous permet de récupérer les données de la table myTable, tandis que la sous-requête garantit que la comparaison est effectuée avec la ligne la plus récente qui a une date antérieure à la ligne actuelle. Cette approche produit efficacement la différence souhaitée en kilomètres :
SELECT mt1.ID, mt1.Kilometers, mt1.date, mt1.Kilometers - IFNULL(mt2.Kilometers, 0) AS number_km_since_last_date FROM myTable mt1 LEFT JOIN myTable mt2 ON mt2.Date = ( SELECT MAX(Date) FROM myTable mt3 WHERE mt3.Date < mt1.Date ) ORDER BY mt1.date
Solution alternative :
Une autre méthode consiste à émuler la fonction lag() à l'aide du hackiness MySQL :
SET @kilo=0; SELECT mt1.ID, mt1.Kilometers - @kilo AS number_km_since_last_date, @kilo := mt1.Kilometers Kilometers, mt1.date FROM myTable mt1 ORDER BY mt1.date
Résultats :
Les deux méthodes calculent avec succès la différence en kilomètres entre les lignes successives du tableau trié, ce qui donne une vue qui fournit les informations supplémentaires 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!