Sql 选择两个连续列的差值

Sql 选择两个连续列的差值,sql,select,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 | 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,你可以通过算术来证明这是真的

因此:

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

如果您的RDBMS是SQL Server,请研究超前和滞后funcitons@PieterGeerkens:这不是特定于SQL Server的。它是ANSI标准SQL,也受到Postgres、Oracle、DB2、SAP HANA、Ingres、Teradata、Vertica和其他一些公司的支持。@a_horse_与_no_name:Good to know;非常感谢。我只在SQL Server上工作了大约10年。戈登,出于纯粹的好奇,你能为这个数学运算提供一些参考吗?@ConsiderMe。看看你的公式。中间值50从公式中删除。所有中间值都是这样。根据我的公式,我猜你指的是OP样本数据。我不反对这一点。我只是对这种现象的一些参考感兴趣: