【发布时间】:2013-01-29 05:05:19
【问题描述】:
我正在尝试区分 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 做 join,因为它们没有正确排序。
有没有办法实现我想要的?
我应该创建一个带有某种 row_number 的视图,然后我可以在我的 INNER JOIN 中使用它吗?
【问题讨论】:
-
这真的很难读。你能用正确的代码部分重新格式化吗?
-
是否有理由只使用 MySQL 完成此操作?
-
如果两个日期相同怎么办?
-
使用支持窗口功能的现代 DBMS 和
lag()会如此简单 -
您是否希望每个
car_id或每个car_driver的公里差重新从0 开始?因为这是一个稍微不同的问题(可以在其他 DBMS 中使用PARTITION BY轻松解决,但是)会使 MySQL 解决方案更加复杂。
标签: mysql select inner-join