首页  >  文章  >  数据库  >  如何计算 MySQL SELECT 查询中行之间的差异?

如何计算 MySQL SELECT 查询中行之间的差异?

DDD
DDD原创
2024-11-07 01:42:02281浏览

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

计算 MySQL SELECT 查询中的行之间的差异

要计算 SELECT 查询中的行之间的差异,请考虑以下方法:

将 LEFT JOIN 与 MAX() 子查询结合使用

您可以根据条件使用 LEFT JOIN 将一行与其前一行连接。在您的情况下,您希望找到每个日期的前一行:

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

使用 Lag() 函数模拟

因为 MySQL 没有lag() 函数,您可以使用用户定义的变量来模拟:

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

结果

两种方法都会产生所需的输出:

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

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

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