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 ответов

26 просмотров

Хорошая задачка на изучение 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 я не дошел (((((. Не чувствую подобные вещи вообще

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта