У меня есть таблица действий со следующей структурой:
id prd_id act_dt grp
------------------------------------
1 1 2000-01-01 00:00:00
2 1 2000-01-01 00:00:01
3 1 2000-01-01 00:00:02
4 2 2000-01-01 00:00:00
5 2 2000-01-01 00:00:01
6 2 2000-01-01 01:00:00
7 2 2000-01-01 01:00:01
8 3 2000-01-01 00:00:00
9 3 2000-01-01 00:00:01
10 3 2000-01-01 02:00:00
Я хочу разделить данные в этой таблице действий по продукту (prd_id
) и дате действия (act_dt
) и обновите столбец группы ( grp
) значением из последовательности для каждой из этих групп.
Суть в том, что мне нужно сгруппировать по похожимвременным меткам, где сходство означает «все записи имеют разницу ровно в 1 секунду». Другими словами, внутри группы разница между любыми 2 записями при сортировке по дате будет ровно 1 секунда, а разница между первой и последней записями может составлять любое количество времени, пока все промежуточные записи равны 1 секунде. отдельно.
Для примера данных группы будут следующими:
id prd_id act_dt grp
------------------------------------
1 1 2000-01-01 00:00:00 1
2 1 2000-01-01 00:00:01 1
3 1 2000-01-01 00:00:02 1
4 2 2000-01-01 00:00:00 2
5 2 2000-01-01 00:00:01 2
6 2 2000-01-01 01:00:00 3
7 2 2000-01-01 01:00:01 3
8 3 2000-01-01 00:00:00 4
9 3 2000-01-01 00:00:01 4
10 3 2000-01-01 02:00:00 5
Какой метод я буду использовать для достижения этой цели?
Размер таблицы составляет ~20 миллионов строк, если это влияет на метод, используемый для решения проблемы.