gpt4 book ai didi

SELECT语句两行之间的MySQL区别

转载 作者:可可西里 更新时间:2023-11-01 06:27:46 25 4
gpt4 key购买 nike

我正在尝试区分 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

现在我想做一个 View ,基本上我有这个额外的信息:自上次日期以来的公里数,我想获得这样的信息:

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 的 View ,然后我可以在我的 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 Fiddle

或者,通过 MySql hackiness 模拟一个 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

Sql Fiddle

关于SELECT语句两行之间的MySQL区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com