我正在尝试使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中使用该视图?
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。