Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 用于更改不同用户的多个值的SQL Server循环_Sql Server_Database_Tsql - Fatal编程技术网

Sql server 用于更改不同用户的多个值的SQL Server循环

Sql server 用于更改不同用户的多个值的SQL Server循环,sql-server,database,tsql,Sql Server,Database,Tsql,我有下一张桌子: 假设这些用户根据插入日期按降序排序 现在,我想做的是,改变它们的排序编号,对于每个用户,排序编号必须从1开始,直到每个用户的出现次数。结果应该类似于: 有人能为我提供一些在sql server中如何实现这一点的线索吗?谢谢。按用户Id使用行号()分区 SELECT Id, [User_Id], Sort_Number = ROW_NUMBER() OVER(PARTITION BY [User_Id]

我有下一张桌子:

假设这些用户根据插入日期按降序排序

现在,我想做的是,改变它们的排序编号,对于每个用户,排序编号必须从1开始,直到每个用户的出现次数。结果应该类似于:

有人能为我提供一些在sql server中如何实现这一点的线索吗?谢谢。

按用户Id使用行号()分区

SELECT
    Id,
    [User_Id],
    Sort_Number = ROW_NUMBER() OVER(PARTITION BY [User_Id] 
                              ORDER BY [User_Id],[CreatedDate] DESC)
    FROM YourTable

使用排名函数
行号()

在给定分区和顺序的情况下,可以使用排名函数计算行的排名

在这种情况下,您需要按用户ID计算每个用户分区的行号。所需的输出显示按ID排序就足够了
orderbyID

SELECT 
    Id, 
    User_ID, 
    ROW_NUMBER() OVER (PARTITION BY User_ID ORDER BY Id) AS Sort_Number
FROM MyTable
您还可以使用其他排名函数,例如RANK、DENSE_RANK根据分数计算排名,或NTILE计算每行的百分位数

您还可以将
OVER
子句用于创建运行总计或移动平均值,例如
SUM(Id)OVER(按用户划分\u Id按Id排序)
将为每个用户创建Id值的运行总计

select id
,user_id
,row_number() over(partition by user_id order by user_id) as sort_number 
from table
SELECT 
    Id, 
    User_ID, 
    ROW_NUMBER() OVER (PARTITION BY User_ID ORDER BY Id) AS Sort_Number
FROM MyTable