Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-07 01:42:02
original
403 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal