184 похожих чатов

Доброго времени суток.... Есть таблица с хэшами событий, всё отсортировано

по времени.
┌────────────────────time─┬─is_chain─┬───────────event_hash─┬
│ 2021-07-26 07:42:30.257 │ 0 │ 3696312325678389301 │
│ 2021-07-26 07:42:34.672 │ 1 │ 6084401719424398292 │
│ 2021-07-26 07:42:38.033 │ 1 │ 16435419841371183696 │
│ 2021-07-26 07:42:41.094 │ 1 │ 17027928113757912089 │
│ 2021-07-26 07:42:44.168 │ 1 │ 12739018415153374561 │
│ 2021-07-26 07:42:46.928 │ 1 │ 12406637112495797940 │
│ 2021-07-26 07:42:49.578 │ 0 │ 3033780203693828475 │
│ 2021-07-26 07:42:52.560 │ 0 │ 5736227406744300673 │
│ 2021-07-26 07:42:56.663 │ 1 │ 1666266680073442384 │
│ 2021-07-26 07:42:59.623 │ 1 │ 13286081543861427944 │
└─────────────────────────┴──────────┴──────────────────────┴─

Если события зависимые, они помечены is_chain == 1. Исходное событие - это is_chain==0 перед зависимым, надо добавить столбец original_hash, в котором хэши исходных событий:

┌────────────────────time─┬─is_chain─┬───────────event_hash─┬────────────orig_hash─┐
│ 2021-07-26 07:42:30.257 │ 0 │ 3696312325678389301 │ 3696312325678389301 │
│ 2021-07-26 07:42:34.672 │ 1 │ 6084401719424398292 │ 3696312325678389301 │
│ 2021-07-26 07:42:38.033 │ 1 │ 16435419841371183696 │ 3696312325678389301 │
│ 2021-07-26 07:42:41.094 │ 1 │ 17027928113757912089 │ 3696312325678389301 │
│ 2021-07-26 07:42:44.168 │ 1 │ 12739018415153374561 │ 3696312325678389301 │
│ 2021-07-26 07:42:46.928 │ 0 │ 12406637112495797940 │ 12406637112495797940 │
│ 2021-07-26 07:42:49.578 │ 0 │ 3033780203693828475 │ 3033780203693828475 │
│ 2021-07-26 07:42:52.560 │ 0 │ 5736227406744300673 │ 5736227406744300673 │
│ 2021-07-26 07:42:56.663 │ 1 │ 1666266680073442384 │ 5736227406744300673 │
│ 2021-07-26 07:42:59.623 │ 1 │ 13286081543861427944 │ 5736227406744300673 │
└─────────────────────────┴──────────┴──────────────────────┴──────────────────────┘

Как это эффективнее сделать?

5 ответов

13 просмотров

Хорошая задачка на изучение Window Functions. Тут вам нужна аггрегирующая функция - argMinIf(event_hash, time,us_chain) и RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING Если бы вы дали данные не в виде таблички с неудобными разделителями, а в виде заготовки select (with/arrayJoin), то было бы больше мотивации решить задачку за вас.

Ilya-Fiks Автор вопроса
Ilya-Fiks Автор вопроса
Boris
Хорошая задачка на изучение Window Functions. Тут ...

SELECT * FROM ( WITH arrayJoin([(1, 11110, 0), (2, 11111, 0), (3, 11112, 1), (4, 11113, 1), (5, 12111, 0), (6, 12112, 1), (7, 13111, 0)]) as data SELECT data.1 as timestamp, data.2 as event_hash, data.3 as is_chain );

Ilya Fiks
SELECT * FROM ( WITH arrayJoin([(1, 11110...

Намек не пригодился? SELECT *,argMaxIf(event_hash, timestamp,is_chain=0) over (order by timestamp RANGE BETWEEN UNBOUNDED PRECEDING and CURRENT ROW ) as orig_hash FROM ( WITH arrayJoin([(1, 11110, 0), (2, 11111, 0), (3, 11112, 1), (4, 11113, 1), (5, 12111, 0), (6, 12112, 1), (7, 13111, 0)]) as data SELECT data.1 as timestamp, data.2 as event_hash, data.3 as is_chain );

Ilya-Fiks Автор вопроса
Boris
Намек не пригодился? SELECT *,argMaxIf(event_hash,...

Да, до argMaxIf я не дошел (((((. Не чувствую подобные вещи вообще

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Всем привет. Подскажите, пожалуйста, как вы реализовываете следующий функционал. Допустим есть форма, в которой имеется выпадающий список со значениями. Значения хранятся в БД...
Евгений
5
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Карта сайта