Maison > base de données > tutoriel mysql > le corps du texte

Comment calculer la différence entre les lignes dans une instruction MySQL SELECT ?

DDD
Libérer: 2024-11-07 09:32:03
original
859 Les gens l'ont consulté

How to Calculate the Difference Between Rows in a MySQL SELECT Statement?

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

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

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!

source:php.cn
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