计算 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中文网其他相关文章!