我有下一张桌子:
假设这些用户根据其插入日期按降序排序。
现在,我想要做的是改变他们的排序数量,对于每个用户,排序号必须从1开始到每个用户的出现次数。结果应该类似于:
有人能为我提供一些如何在sql server中执行此操作的线索吗?谢谢。
您可以使用ROW_NUMBER排名函数计算给定分区和顺序的行的排名。
在这种情况下,您要计算每个用户PARTITION BY User_ID
的行号。所需的输出显示按ID排序足够ORDER BY ID
。
SELECT
Id,
User_ID,
ROW_NUMBER() OVER (PARTITION BY User_ID ORDER BY Id) AS Sort_Number
FROM MyTable
您可以使用其他排名功能,例如RANK,DENSE_RANK根据分数计算排名,或NTILE计算每行的百分位数。
您还可以将OVER
子句与aggragets一起使用来创建运行总计或移动平均值,例如SUM(Id) OVER (PARTITION BY User_ID ORDER BY Id)
将为每个用户创建Id值的运行总计。
使用ROW_NUMBER()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
select id
,user_id
,row_number() over(partition by user_id order by user_id) as sort_number
from table
使用排名功能row_number()
select *,
row_number() over (partition by User_id order by user_id, date desc)
from table t