首页  >  文章  >  数据库  >  如何计算 MySQL 表中行之间的公里差?

如何计算 MySQL 表中行之间的公里差?

DDD
DDD原创
2024-11-08 20:03:02602浏览

How to Calculate Kilometer Differences Between Rows in a MySQL Table?

计算 MySQL SELECT 语句中行之间的差异

在这种情况下,您有一个 MySQL 表,其中包含公里、日期、和汽车信息,但可能并不总是按时间顺序排列。您的目标是创建一个视图,其中包含一个附加列,显示每辆车自上次日期以来的公里数。

要实现此目的,您不能依赖于 ID 列上的简单 JOIN,因为数据是不按时间顺序排序。相反,您需要使用 LEFT JOIN 和子查询来确定每行当前日期之前的最大日期。

使用 LEFT JOIN 和子查询

以下查询使用 LEFT JOIN 将当前表行 (mt1) 与具有最大日期的行 (mt2) 连接起来早于 mt1 的日期:

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

此查询计算当前行 (mt1) 的公里数与最大日期早于当前日期 (mt2) 的行的公里数之间的差值。如果 mt2 为 NULL,则意味着没有前一行,因此差值为 0。

使用 MySQL Hackery 的替代方法

作为替代方法,您可以使用MySQL hack 来模拟 lag() 函数,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

此查询使用用户定义的变量 (@kilo) 用于跟踪先前的公里值。当前公里值与 @kilo 之间的差异为您提供自上次日期以来的公里数。每行处理完毕后,@kilo 变量都会更新为当前公里值。

以上是如何计算 MySQL 表中行之间的公里差?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn