Как вести учет в столбце количества раз, когда появляется идентификатор? - PullRequest
0 голосов
/ 24 января 2019

У меня есть user_id в одном столбце, attempt_id в другом, наряду с различными другими данными.attempt_id является уникальным , но user_id - нет.

Я хотел бы вставить столбец, в котором указано, сколько раз user_id появлялось до этого момента.Итак, в первый раз, когда появляется 1, 2, 2 и т. Д.

Я пытался сделать это с помощью базовых функций count, но это возвращает общее количество в каждом случае, а не количество работ.

Есть ли простая формула / хитрость, которая решает эту проблему?Запуск суммы не совсем то, что я хочу, я хочу найти в столбце и посмотреть, является ли это первый случай появления user_id.

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Предполагая, что 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;
0 голосов
/ 24 января 2019

Выходя за пределы этого, здесь, но, исходя из вашего описания выше, я предполагаю, что вы захотите увеличить 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
0 голосов
/ 24 января 2019

Если вы просто хотите считать в запросе, используйте row_number(). Вам нужно что-то, что определяет порядок строк - предположительно attempt_id:

select t.*,
       row_number() over (partition by user_id order by attempt_id) as seqnum
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...