我在一列中有user_id
,在另一列中有attempt_id
,以及其他各种数据。 attempt_id
是唯一,但user_id
不是。
我想插入一列,以减少到这一点为止user_id
出现的次数。所以第一次出现,然后是1,第二是2,等等。
我已经尝试使用基本的count
函数来做到这一点,但是它返回每个实例的总计数,而不是运行计数。
是否有一个简单的公式/技巧可以解决此问题?运行总和并不是我想要的,我想搜索该列,看看这是否是出现user_id
的第一个实例。
答案 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