Maison  >  Article  >  base de données  >  Comment puis-je calculer la différence entre les lignes dans une requête MySQL SELECT ?

Comment puis-je calculer la différence entre les lignes dans une requête MySQL SELECT ?

DDD
DDDoriginal
2024-11-07 01:42:02281parcourir

How can I calculate the difference between rows in a MySQL SELECT query?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn