Я пытаюсь создать группу для последовательных строк пользователем. Я пробовал несколько разных вариантов. Самое близкое, что я получил, - это округление даты и времени до ближайших 30 минут и использование плотного ранга следующим образом:
DENSE_RANK () over (order by user_id, dateTimeRoundNear) в качестве группировки, в то время как это приближает меня, я верю, что тамдолжен быть более точным способом сделать это. Данные приведены ниже, последний столбец требуемая группа - это вывод, который я ищу. Любая помощь очень ценится!
В идеале я хотел бы создать идентификаторы групп по user_id и event_order, чтобы каждая последовательная группа по user_id получала идентификатор
user_id |event_order |требуемая группа
xxxx1 1 1
xxxx1 2 1
xxxx1 3 1
xxxx1 1 2
xxxx1 2 2
xxxx1 2 3
Обновление: пожалуйста, используйте приведенный ниже скрипт для создания набора данных. В идеале мы могли бы программно имитировать столбец требуемой группы.
create table #test
(ID integer,
user_id integer,
SendDate datetime,
event_type varchar(255),
event_order integer,
dateTimeRoundNear datetime,
grouping integer,
desired_group integer
);
insert into #test
(ID, user_id, SendDate, event_type, event_order, dateTimeRoundNear, grouping, desired_group)
values
(13329832, 125440, '20190927 01:07:18 AM', 'pwsent', 1, '20190927 01:00:00 AM', 1, 1),
(13329832, 125440, '20190927 01:07:18 AM', 'pwchange', 2, '20190927 01:00:00 AM', 1, 1),
(13330033, 125440, '20190927 01:08:22 AM', 'pwreset', 3, '20190927 01:00:00 AM', 1, 1),
(13331789, 12992, '20190927 01:15:10 AM', 'pwsent', 1, '20190927 01:30:00 AM', 13, 2),
(13331790, 12992, '20190927 01:15:10 AM', 'pwchange', 2, '20190927 01:30:00 AM', 13, 2),
(13332009, 12992, '20190927 01:16:20 AM', 'pwreset', 3, '20190927 01:30:00 AM', 13, 2),
(13332719, 128016, '20190927 01:20:37 AM', 'pwsent', 1, '20190927 01:30:00 AM', 9, 3),
(13332720, 128016, '20190927 01:20:37 AM', 'pwchange', 2, '20190927 01:30:00 AM', 9, 3),
(13332857, 128016, '20190927 01:21:23 AM', 'pwreset', 3, '20190927 01:30:00 AM', 9, 3),
(13334671, 128016, '20190927 01:31:24 AM', 'pwsent', 1, '20190927 01:30:00 AM', 9, 4),
(13334672, 128016, '20190927 01:31:24 AM', 'pwchange', 2, '20190927 01:30:00 AM', 9, 4),
(13334713, 128016, '20190927 01:31:34 AM', 'pwsent', 1, '20190927 01:30:00 AM', 9, 5),
(13334714, 128016, '20190927 01:31:34 AM', 'pwchange', 2, '20190927 01:30:00 AM', 9, 5),
(13334898, 149296, '20190927 01:32:34 AM', 'pwsent', 1, '20190927 01:30:00 AM', 25, 6),
(13334899, 149296, '20190927 01:32:34 AM', 'pwchange', 2, '20190927 01:30:00 AM', 25, 6),
(13334978, 128016, '20190927 01:32:42 AM', 'pwsent', 1, '20190927 01:30:00 AM', 9, 7),
(13334980, 128016, '20190927 01:32:42 AM', 'pwchange', 2, '20190927 01:30:00 AM', 9, 7),
(13348681, 201264, '20190927 03:59:09 AM', 'pwchange', 2, '20190927 04:00:00 AM', 68, 8),
(13376580, 317408, '20190927 09:54:03 AM', 'pwchange', 2, '20190927 10:00:00 AM', 108,9);
select
*
from #test;
снимок экрана набора данных