Calcul des différences entre les lignes dans une requête MySQL SELECT
Pour calculer la différence entre les lignes dans une requête SELECT, envisagez l'approche suivante :
Utilisation d'un LEFT JOIN avec une sous-requête MAX()
Vous pouvez utiliser un LEFT JOIN pour connecter une ligne à la précédente, en fonction d'une condition. Dans votre cas, vous souhaitez retrouver la ligne précédente pour chaque date :
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
Utilisation d'une émulation de fonction Lag()
Puisque MySQL n'a pas de lag(), vous pouvez en émuler une à l'aide d'une variable définie par l'utilisateur :
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 produiront le résultat souhaité :
ID | Kilometers | date | car_id | car_driver | number_km_since_last_date 1 | 100 | 2012-05-04 | 1 | 1 | 0 2 | 200 | 2012-05-08 | 1 | 1 | 100 4 | 600 | 2012-05-16 | 1 | 1 | 400 3 | 1000 | 2012-05-25 | 1 | 1 | 400
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!