开发者社区> 问答> 正文

SELECT语句的两行之间的MySQL差异?mysql

我正在尝试使mysql数据库中两行的区别。 我有包含ID,公里,日期,car_id,car_driver等 的表格。由于我并不总是以正确的顺序在表格中输入信息,因此最终可能得到如下信息:

ID | Kilometers | date | car_id | car_driver | ... 1 | 100 | 2012-05-04 | 1 | 1
2 | 200 | 2012-05-08 | 1 | 1 3 | 1000 | 2012-05-25 | 1 | 1 4 | 600 | 2012-05-16 | 1 | 1 使用select语句,我可以对表格进行正确排序:

SELECT * FROM mytable ORDER BY car_driver ASC, car_id ASC, date ASC 我将获得:

ID | Kilometers | date | car_id | car_driver | ...
1 | 100 | 2012-05-04 | 1 | 1
2 | 200 | 2012-05-08 | 1 | 1 4 | 600 | 2012-05-16 | 1 | 1
3 | 1000 | 2012-05-25 | 1 | 1 现在,我想查看一下我基本上具有以下额外信息的地方:自上次约会以来的公里数,我想获得以下信息:

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 我曾想过要进行INNER JOIN来执行我想要的操作,但是我感到无法对ID进行联接,因为它们的排序不正确。 有没有办法实现我想要的?

我是否可以创建带有某种row_number的视图,然后在INNER JOIN中使用该视图?

展开
收起
保持可爱mmm 2020-05-17 20:16:03 796 0
1 条回答
写回答
取消 提交回答
  • 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 SQL小提琴 或者,lag()通过MySql hackiness 模拟功能...

    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来源:stack overflow

    2020-05-17 20:16:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像