записи сессии, то у меня вопрос: в документации сказано следующее Считает разницу между последовательными значениями строк в блоке данных
т.е. если её использовать примерно так
CREATE TABLE diff_test
(
session_id String,
price Float64,
action_at DateTime
) ENGINE = Memory;
insert into diff_test values ('session1', 0.42, '2017-02-14 10:16:00'),
('sessiondup1', 0.84, '2017-02-14 10:18:00'),
('sessiondup1', 0.42, '2017-02-14 10:16:00'),
('session2', 0.42, '2017-02-14 10:19:00'),
('sessiondup2', 0.42, '2017-02-14 10:19:00'),
('sessiondup2', 0.42, '2017-02-14 10:19:00'),
('session2', 0.42, '2017-02-14 10:19:00'),
('session3', 0.42, '2017-02-14 10:19:00');
select * from (
select price, action_at, session_id, runningDifference(sipHash64(session_id)) as diff from (
select session_id, price, action_at from diff_test order by session_id, action_at asc
)
) where diff <> 0 order by action_at
то мы будем терять первую строку каждого блока (если результат приходит несколькими блоками) или только первую строку всего результата ?
и что вот такой запрос будет возвращать уникальные строки с началом сессии
SELECT *
FROM
(
SELECT
price,
action_at,
session_id,
runningDifference(sipHash64(session_id)) AS diff,
rowNumberInBlock() AS num
FROM
(
SELECT
session_id,
price,
action_at
FROM diff_test
ORDER BY
session_id ASC,
action_at ASC
)
)
WHERE diff <> 0 or num = 0
ORDER BY action_at ASC
1. Для каждого блока. 2. Да. Хотя решение выглядит неудобным, с моей точки зрения.
Обсуждают сегодня