ts
1, a, 10
1, b, 11
1, a, 12
1, b, 13
1, c, 14
1, a, 15
1, b, 16
1, c, 17
1, a, 18
1, a, 19
1, c, 20
uid - id пользователя
ev - событие (a, b или с)
ts - timestamp (для Uint8)
Группировка по uid: ищу подпоследовательность a->b->c:
sequenceMatch = 1,
sequenceCount = 2
Столкнулся с двумя вопросами:
1. А возможно ли получить ts по первой найденной подпоследовательности время начала и окончания? (И если можно, чему будет равно время начало в примере)
2. и по sequenceMatch: ей нужен DateTime для сортировки, но там будет с точностью до одной секунды: т.е. toDateTime(10) = toDatetime(11) = '2019-01-10 01:20:01' (условно, я храню в Uint64 до миллисекунд), если в подзапросе будет сортировка по ts, это решит возможную проблему сортировки в рамках одной секунды?
1. С помощью sequenceMatch / Count - нет. Выбирает первое встретившееся, т.е. в вашем случае a10, b11 c14. Count найдет 2 цепочки в вашем примере. 2 Про таймстампы не уверен поможет или нет предварительная сортировка. Если сделать в один поток - то должно помочь, иначе - кажется будет зависеть от скорости обработки разных блоков. Там можно эту проблему по другому обойти - перемаповать диапазон времени. Например просто взять мс и вычесть минимальное значение, а результат скастовать в DateTime. 3. Там сейчас добавляют поддержку других (64 битных) типов, чтобы можно было использовать вместо DateTime в этих фунциях про последовательности
Обсуждают сегодня