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