Sql 标准偏差

Sql 标准偏差,sql,sql-server,Sql,Sql Server,我得到一个错误列“mpg”未知?我试图计算mpg的stdev,一个计算列 SELECT Date, Vehicle, Quantity as [Ltrs], LAG(OdoReadingMiles, 1) OVER (PARTITION BY Vehicle ORDER BY Date) AS previousmileage, OdoReadingMiles-LAG(OdoReadingMiles, 1) OVER (PARTITION BY Vehicle ORDER BY D

我得到一个错误列“mpg”未知?我试图计算mpg的stdev,一个计算列

SELECT Date, Vehicle, Quantity as [Ltrs],
    LAG(OdoReadingMiles, 1) OVER (PARTITION BY Vehicle ORDER BY Date) AS previousmileage,
    OdoReadingMiles-LAG(OdoReadingMiles, 1) OVER (PARTITION BY Vehicle ORDER BY Date) as [Miles],
    (OdoReadingMiles-LAG(OdoReadingMiles, 1) OVER (PARTITION BY Vehicle ORDER BY Date)) / (Quantity/4.544) as [MPG],
    case when (OdoReadingMiles-LAG(OdoReadingMiles, 1) OVER (PARTITION BY Vehicle ORDER BY Date)) / (Quantity/4.544) not between 2 and 10
        then 1 else 0 end as [Anomaly],
    stdev(MPG)
FROM [Fleet].[DwhTriscanChargeouts]
where vehicle='DE63VAM'
order by 2, 1

SELECT列的计算顺序未知,所以不能在同一SELECT语句中使用computed列。您可以使用CTE或subquery。

出现此错误的原因是您试图在计算实际值之前计算STD MPG

我建议您使用一个内部查询来计算列,然后计算STD。内部查询在上限select子句之前计算,上限select子句在查询中最后计算


不要忘记使用GROUP BY子句,因为STD是一个聚合函数。

MPG列在同一个select列表中不可用。使用子查询,或重新计算MPG。@ammarWahid。stdev是一个聚合函数。目前还不清楚你希望结果是什么样子。