选择两个连续列的差异

时间:2016-01-01 14:58:18

标签: sql select

我有一辆看起来像这样的桌车:

| mileage | carid |
------------------
|   30    |   1   |
|   50    |   1   |
|   100   |   1   |
|   0     |   2   |
|   70    |   2   |

我想得到每辆车的平均差异。所以例如对于汽车1我想得到((50-30)+(100-50))/ 2 = 35.所以我创建了以下查询

SELECT AVG(diff),carid FROM (
  SELECT (mileage-
    (SELECT Max(mileage) FROM car Where mileage<mileage AND carid=carid GROUP BY carid)) 
    AS diff,carid 
  FROM car GROUP BY carid)

但这不起作用,因为我无法将当前行用于其他列。而且我对如何以不同的方式实际解决这个问题一无所知。 那么我怎么能以某种方式获得下一行的价值呢?

1 个答案:

答案 0 :(得分:2)

平均差异是最大值减去最小值除以计数值小于1(你可以用算术来说服自己这是真的)。​​

因此:

select carid,
       ( (max(mileage) - min(mileage)) / nullif(count(*) - 1, 0)) as avg_diff
from cars
group by carid;