如何在ID中保持计数以显示ID出现的次数?

时间:2019-01-24 00:18:53

标签: sql sql-server ssms

我在一列中有user_id,在另一列中有attempt_id,以及其他各种数据。 attempt_id唯一,但user_id不是。

我想插入一列,以减少到这一点为止user_id出现的次数。所以第一次出现,然后是1,第二是2,等等。

我已经尝试使用基本的count函数来做到这一点,但是它返回每个实例的总计数,而不是运行计数。

是否有一个简单的公式/技巧可以解决此问题?运行总和并不是我想要的,我想搜索该列,看看这是否是出现user_id的第一个实例。

3 个答案:

答案 0 :(得分:0)

如果只想查询中的计数,请使用row_number()。您需要指定行顺序的内容-大概为attempt_id

select t.*,
       row_number() over (partition by user_id order by attempt_id) as seqnum
from t;

答案 1 :(得分:0)

假设attempt_id随着给定用户的出现而增加,您可以尝试使用COUNT作为分析功能:

WITH cte AS (
    SELECT user_id, attempt_id,
        COUNT(*) OVER (PARTITION BY user_id ORDER BY attempt_id) cnt
    FROM yourTable
)

SELECT user_id, attempt_id
FROM cte
WHERE cnt = 1;

答案 2 :(得分:0)

这里要绕一圈,但是根据上面的描述,我假设您要在插入新行时增加try_id。因此,我假设您将传递user_id作为变量。因此,您可以考虑以下模式:

CREATE TABLE #tmp(userid int, attempt_id int)
DECLARE @userid int 

SET @userid = 1

INSERT INTO #tmp 
SELECT @userid, (SELECT ISNULL(MAX(attempt_ID),0) + 1 from #tmp where userid = @userid)

select * from #tmp