Счетчик добавления T-SQL к сгруппированным данным - PullRequest
3 голосов
/ 02 апреля 2019

Я пытаюсь создать запрос, который отображает столбец, который увеличивается (рассчитывается) для каждого набора данных группы. Общий порядок результатов не имеет значения, за исключением того, что вхождение должно учитываться по дате (самое старое = 1) и должно сбрасываться для каждого набора сгруппированных данных. Вот пример таблицы ProductInteractions.

+---------+------------+----------------+------------+
| User ID | Product ID | Date Purchased | Occurrence |
+---------+------------+----------------+------------+
| user15  | b1290      | 1/1/2012       |          1 |
| user15  | b1290      | 1/15/2013      |          2 |
| user15  | b1290      | 3/15/2019      |          3 |
| user15  | a7983      | 7/22/2017      |          1 |
| user2   | a7983      | 12/3/2015      |          1 |
| user2   | a7983      | 5/6/2016       |          2 |
| user3   | a7983      | 3/24/2017      |          1 |
+---------+------------+----------------+------------+

Исходные данные:

+---------+------------+-----------+
| User ID | Product ID |   Date    |
+---------+------------+-----------+
| user15  | b1290      | 1/1/2012  |
| user2   | a7983      | 5/6/2016  |
| user15  | b1290      | 3/15/2019 |
| user15  | a7983      | 7/22/2017 |
| user2   | a7983      | 12/3/2015 |
| user15  | b1290      | 1/15/2013 |
| user3   | a7983      | 3/24/2017 |
+---------+------------+-----------+

Обратите внимание, что в приведенном выше примере пользователь 15 и продукт b1290 имеют 3 взаимодействия. Важно, чтобы первое вхождение было связано с начальной датой взаимодействия и чтобы последующие взаимодействия учитывались по возрастанию.

Я полагаю, что основным форматом запроса будет:

    SELECT [User ID],
           [Product ID],
           [Date Purchased]
           -- Something here utilizing IDENTITY, maybe?
      FROM ProductInteractions
     GROUP BY [User ID],
              [Product ID];


Ответы [ 2 ]

4 голосов
/ 02 апреля 2019

использовать ROW_NUMBER ()

Вот код для проверки / проверки скрипта ниже: замените ProductInteractions на вашу собственную таблицу

declare @ProductInteractions as table([User ID] varchar(50),[Product ID] varchar(50),[Date] datetime)
insert into @ProductInteractions values
('user15'  , 'b1290'      , '1/1/2012'  ),
('user2'   , 'a7983'      , '5/6/2016'  ),
('user15'  , 'b1290'      , '3/15/2019' ),
('user15'  , 'a7983'      , '7/22/2017' ),
('user2'   , 'a7983'      , '12/3/2015' ),
('user15'  , 'b1290'      , '1/15/2013' ),
('user3'   , 'a7983'      , '3/24/2017' )

select [User ID],[Product ID],[Date],
row_number() over(partition by [User ID],[Product ID] order by [date]) [occurence]
from @ProductInteractions order by [Product ID] desc

enter image description here

3 голосов
/ 02 апреля 2019

Простой ROW_NUMBER идеально подходит для этого.

SELECT [User ID],
    [Product ID],
    [Date Purchased]
    , ROW_NUMBER() over(partition by [User ID], [Product ID] order by [Date Purchased])
FROM ProductInteractions
GROUP BY [User ID],
        [Product ID];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...