相关疑难解决方法(0)

在where子句中使用ranking-function派生列(SQL Server 2008)

希望这对于SQL-Ninja来说是微不足道的......试图让以下查询工作:

这适用于SQL Server 2008

SELECT 
    ROW_NUMBER() OVER (ORDER BY Date_Time DESC) AS RowNumber, *
FROM
    (SELECT 
         T.A_ID, T.User_Name, T.Date_Time, T.Value,
         U.ID, U.Name, U.Field1, U.Field2,
         COUNT(U.ID) OVER () AS TotalRows
     FROM 
        TeeTable as T 
    INNER JOIN 
        YouTable AS U ON T.U_ID = U.ID
    WHERE 
        T.Value BETWEEN 222 AND 225) Filtered
WHERE 
    RowNumber BETWEEN 1 AND 5
Run Code Online (Sandbox Code Playgroud)

这些值在某种程度上是为了给出一个具体的例子而设计的,但是查询的精神被完全保留了下来.我从这个陈述中得到的错误是:

列名称'RowNumber'无效.

如果我删除最后的WHERE子句(RowNumber BETWEEN ...),它返回一个预期的结果集(A_ID,User_Name,Date_Time等...),在所述结果中RowNumber为一列(具有敏感值).但我无法在WHERE子句中与它进行比较.我显然做了一些愚蠢的事情,但这达到了我的SQL限制!

我已经尝试将其重新安排为CTE,(WITH Filtered AS ...)但最终结果是一样的,看来这只是我已经在做的糖.

想法?如何过滤RowNumber派生列?

sql sql-server sql-server-2008

8
推荐指数
2
解决办法
2万
查看次数

使用SQL函数FIRST_VALUE获取最后一个值

是否可以使用SQL函数获取排序变量的最后一个值FIRST_VALUE?这是获取最后一个值的方法.

select
[MyVal_Last] = FIRST_VALUE([MyValue]) OVER (PARTITION BY [Category] ORDER BY [MyValue] DESC)  
from tbl
Run Code Online (Sandbox Code Playgroud)

是否可以修改它以获得倒数第二个值?

更新.我熟悉不同的方法来获得最后但提到的一个值,即这里的答案是旧的,并且已经长了很长的胡须.我想知道新版本的SQL Server是否可以使用新功能以更优雅的方式完成它.

sql sql-server function sql-server-2016

0
推荐指数
1
解决办法
455
查看次数