найти максимально приближенное значение value к задаваемой константе? Например, у меня есть лог накопления кредитов пользователем, и я хочу понять, в какой момент времени он достиг какого-то порога (хотя его value может быть ближайшем, но не точно соответствовать константе)
Либо вверх, либо вниз
решил пока путем забора всей инфы и агрегацией путем прогона каждой записи пока переменная не превысит указанный треш
если вниз то вроде MAX(value) less than or equals CONSTANT должно работать, если вверх, то MIN(value) more than CONSTANT. Ну и логично, что если верхнее есть то нинее искать не нужно, никакой специфики КХ тут вроде нет или я что -то не понял
если я правильно уловил мысль, то история примерно такая: (то бишь кумулятивная сумма с обнулением при достижении лимита) https://t.me/clickhouse_ru/185578
да, очень похоже. но мне на группы не надо бить. только по константе определенной.
ну тут чуть сложнее, потому как диапазоны вроде какие -то, сорри вчитываться пока времени нет. но в теории можно на персентили разделить и использовать что -то вроде quantilesExact
ну мне надо знать время, когда сумма продаж достигла трешхолда и смотреть дальше. типа фиксировать время выполнения плана по пятилетке
скажем так, надо зафиксировать время выполнения плана. план в $100 выполняется, например, двумя продажами по $50, и план может быть выполнен неограниченное количество раз, по сути сто продаж по $100 в одну микросекунду - это 100 выполнений плана
ну сходу приходит что -то вроде select id, sum(sale) as summary, timestamp ... ON summary equals 100 AND id > last_founded_id GROUP BY timestamp. но я не на столько часто пишу sql, тут просто поиграть с запросами нужно, точнее вряд ли подскажу.
чую, что пахнет чем-то из оконных функций, которых в КХ толком нет же
там примерно подразумевалось что -то вроде ``` SELECT T.Id, T.sale, T.timestamp (SELECT sum(sale) FROM Table WHERE Id <= T.Id) 'total' FROM Table T HAVING total = 100 ``` тут только нужно как -то ограничить выборку чтобы не считать уже посчитаные записи ну и да по таймштампу сортировать чтобы по порядку было
Не вариант, надо иметь результат за всю историю
SELECT abs(dateDiff('second',dateTimeField, toDateTime('your_contant'))) AS date_distance, field1, field2 FROM table WHERE dateTimeField BETWEEN toDateTime('your_constant') - INTERVAL 1 WEEK AND toDateTime('your_constant') + INTERVAL 1 WEEK ORDER BY date_distance LIMIT 1
Это ж вообще не то) Константа у меня Value а не dateTime
SELECT argMin(timestamp, abs(value - $CONSTANT)) AS best_time, userid FROM users GROUP BY userid
Обсуждают сегодня