From 882198d59a215525450b1a5db01aff04ecbf1831 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Mon, 13 Apr 2026 12:06:25 +0200 Subject: [PATCH] fix: use lagInFrame instead of lag for ClickHouse compatibility ClickHouse does not have lag() as a window function. Use lagInFrame() with explicit ROWS BETWEEN frame instead. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../server/app/storage/ClickHouseMetricsQueryStore.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java index fd18a0a6..5dde1cab 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java @@ -88,8 +88,9 @@ public class ClickHouseMetricsQueryStore implements MetricsQueryStore { String finalSql = """ SELECT bucket, metric_name, - greatest(0, max_val - lag(max_val, 1, max_val) - OVER (PARTITION BY metric_name ORDER BY bucket)) AS avg_value + greatest(0, max_val - lagInFrame(max_val, 1, max_val) + OVER (PARTITION BY metric_name ORDER BY bucket + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS avg_value FROM ( SELECT toStartOfInterval(collected_at, INTERVAL %d SECOND) AS bucket, metric_name,