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

问题描述 投票:1回答:4

我有下一张桌子:

enter image description here

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

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

enter image description here

有人能为我提供一些如何在sql server中执行此操作的线索吗?谢谢。

sql-server database tsql
4个回答
2
投票

您可以使用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值的运行总计。


0
投票

使用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

0
投票
select id
,user_id
,row_number() over(partition by user_id order by user_id) as sort_number 
from table

0
投票

使用排名功能row_number()

select *, 
        row_number() over (partition by User_id order by user_id, date desc) 
from table t
© www.soinside.com 2019 - 2024. All rights reserved.