Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用CTE从PARTITION BY子句中获取最大值 当前查询提供如下输出 预期产出如下_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 如何使用CTE从PARTITION BY子句中获取最大值 当前查询提供如下输出 预期产出如下

Sql server 如何使用CTE从PARTITION BY子句中获取最大值 当前查询提供如下输出 预期产出如下,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在使用SQL 2016并尝试从BankRequest表中获取多条记录。在这个表中,每个accountid都有多条记录,正如我在上面第一个表中提到的。但我只需要BankRequest表中每个accountid的最后一个事务id 请帮助我解决此问题,或帮助我实现预期输出的任何更好的替代方法。使用按AccountID DESC排序,并选择行号为1的位置 然而,我认为你给了我们一个不完整的数据集 “我只需要每个accountid的最后一个交易id”意味着您可能真的应该使用按交易id说明排序使用按帐户

我正在使用SQL 2016并尝试从BankRequest表中获取多条记录。在这个表中,每个accountid都有多条记录,正如我在上面第一个表中提到的。但我只需要BankRequest表中每个accountid的最后一个事务id


请帮助我解决此问题,或帮助我实现预期输出的任何更好的替代方法。

使用
按AccountID DESC排序,并选择行号为1的位置

然而,我认为你给了我们一个不完整的数据集


“我只需要每个accountid的最后一个交易id”意味着您可能真的应该使用
按交易id说明排序
使用
按帐户id说明排序
,并选择行号为1的位置

然而,我认为你给了我们一个不完整的数据集


“我只需要每个accountid的最后一个交易id”意味着您可能真的应该在最终选择中按交易id描述订购两个快速选项

    ACCOUNTID   NUMBER
    897         3
    1110        4
    1119        4
    1146        2
    1182        1
    1395        5

Select AccountID,Number=max(number) 
 From  ABC 
 Group By AccountID
或消除CTE

Select Top 1 with ties *
 From  ABC
 Order By Row_Number() over (Partition By AccountID Order By Number Desc)

最终选择中的两个快速选项

    ACCOUNTID   NUMBER
    897         3
    1110        4
    1119        4
    1146        2
    1182        1
    1395        5

Select AccountID,Number=max(number) 
 From  ABC 
 Group By AccountID
或消除CTE

Select Top 1 with ties *
 From  ABC
 Order By Row_Number() over (Partition By AccountID Order By Number Desc)

或者,您可以使用相同的cte,并获得如下所示的编号=1:

Select AccountId
       Number = count(*)
 From  BankRequest
 Group By AccountId

这类似于John提到的top 1领带,或者您可以使用相同的cte,获得数字=1,如下所示:

Select AccountId
       Number = count(*)
 From  BankRequest
 Group By AccountId

这类似于John提到的前1条领带

您可以使用
CTE+Row\u Number()+Max()
如下图所示

;WITH ABC AS 
(
    SELECT ACCOUNTID,NUMBER, ROW_NUMBER() OVER (PARTITION BY ACCOUNTID ORDER BY Number DESC) AS RowN FROM BankRequest
)
SELECT ACCOUNTID, NUMBER FROM ABC
where RowN = 1

您可以使用
CTE+Row\u Number()+Max()
如下所示

;WITH ABC AS 
(
    SELECT ACCOUNTID,NUMBER, ROW_NUMBER() OVER (PARTITION BY ACCOUNTID ORDER BY Number DESC) AS RowN FROM BankRequest
)
SELECT ACCOUNTID, NUMBER FROM ABC
where RowN = 1

修正了那个问题修正了那个问题