虽然你的输出显得扑朔迷离。然而我给了以下的答案:
SOLUTION #1
SELECT
carsTable1.car_name,
carsTable1.price,
CASE WHEN ABS(carsTable1.price - (SELECT price FROM cars WHERE car_name='car 2')) = 0 THEN NULL ELSE
ABS(carsTable1.price - (SELECT price FROM cars WHERE car_name='car 2')) END diff
FROM
(SELECT
@rn := @rn + 1 row_number,
cars.car_name,
cars.price
FROM cars, (SELECT @rn := 0) var
) carsTable1;
Demo Here
样品输入:
car_name price
car 1 100
car 2 200
car 3 300
样本输出:
car_name price diff
car 1 100 100
car 2 200 NULL
car 3 300 100
注:的car 2
价格与汽车的其余部分的价格进行比较。所以结果显示null
为car 2
,因为它是参考车。
如果我误解了你的要求,那么它一定是:你想连续行即之间的价格差异(No car,car1),(car1,car2), (car2,car3), (car3,car4)....
所以在这种情况下,你可以通过下面的查询:
SOLUTION #2
SELECT
car_name,
cars.price,
CASE WHEN @currentPrice = 0 THEN NULL ELSE ABS(cars.price - @currentPrice) END AS diff,
@currentPrice := price
FROM cars ,(SELECT @currentPrice := 0) var
ORDER BY car_name
SQL FIDDLE BASED ON THIS QUERY
如果你想omit the fourth column
:
SELECT
t.car_name,
t.price,
t.diff
FROM
(
SELECT
car_name,
cars.price,
CASE WHEN @currentPrice = 0 THEN NULL ELSE (cars.price - @currentPrice) END AS diff,
@currentPrice := price
FROM cars ,(SELECT @currentPrice := 0) var
ORDER BY car_name) t
SQL FIDDLE BASED ON THIS QUERY
请解释输出位 – 1000111
有差异被反对的价格计算与其余的第一辆车? – 1000111
让我更新我的问题......这将很容易理解 – user3172982