你不能使用你同样SELECT
子句中的其他地方SELECT
子句中创建别名,所以你需要在DATEDIFF()
函数内把你的FIRST_VALUE()
和LAST_VALUE()
功能:
SELECT DISTINCT
Test,
FIRST_VALUE (CONVERT(DATE, datetime)) OVER (ORDER BY datetime DESC) StartDate,
LAST_VALUE (CONVERT(DATE, datetime)) OVER (ORDER BY datetime DESC) EndDate,
DATEDIFF(MONTH, FIRST_VALUE (CONVERT(DATE, datetime)) OVER (ORDER BY datetime DESC)
, LAST_VALUE (CONVERT(DATE, datetime)) OVER (ORDER BY datetime DESC))
FROM
Tests
或者你可以运行一切但DATEDIFF()
在子查询/ CTE:
SELECT *,DATEDIFF(MONTH, StartDate, EndDate)
FROM (SELECT DISTINCT
Test,
FIRST_VALUE (CONVERT(DATE, datetime)) OVER (ORDER BY datetime DESC) StartDate,
LAST_VALUE (CONVERT(DATE, datetime)) OVER (ORDER BY datetime DESC) EndDate
FROM
Tests
) AS sub
你也不能使用在SELECT
克劳斯创建别名e在WHERE
子句中,但您可以在ORDER BY
中使用它们,当然也可以在任何外部查询中使用它们。
如果这些值是有序的,为什么不使用'min()'和'max()'? –