diff --git a/src/query/src/range_select/plan.rs b/src/query/src/range_select/plan.rs index 7bed19406d6e..1d2d586860dd 100644 --- a/src/query/src/range_select/plan.rs +++ b/src/query/src/range_select/plan.rs @@ -773,6 +773,8 @@ impl RangeSelect { } else { vec![] }; + let distinct = aggr.distinct; + // TODO(discord9): add default null treatment? let input_phy_exprs = self.create_physical_expr_list( matches!( @@ -786,7 +788,7 @@ impl RangeSelect { match &aggr.func_def { AggregateFunctionDefinition::BuiltIn(fun) => create_aggr_expr( fun, - false, + distinct, &input_phy_exprs, &order_by, &input_schema, @@ -801,7 +803,7 @@ impl RangeSelect { &input_schema, name, false, - false, + distinct, ), } } diff --git a/tests/cases/standalone/common/range/by.result b/tests/cases/standalone/common/range/by.result index e4d9e243cd12..e81822e1b8fa 100644 --- a/tests/cases/standalone/common/range/by.result +++ b/tests/cases/standalone/common/range/by.result @@ -105,3 +105,53 @@ DROP TABLE host; Affected Rows: 0 +CREATE TABLE grpc_latencies ( + ts TIMESTAMP TIME INDEX, + host STRING, + method_name STRING, + latency DOUBLE, + PRIMARY KEY (host, method_name) +) with('append_mode'='true'); + +Affected Rows: 0 + +INSERT INTO grpc_latencies (ts, host, method_name, latency) VALUES + ('2024-07-11 20:00:06', 'host1', 'GetUser', 103.0), + ('2024-07-11 20:00:06', 'host2', 'GetUser', 113.0), + ('2024-07-11 20:00:07', 'host1', 'GetUser', 103.5), + ('2024-07-11 20:00:07', 'host2', 'GetUser', 107.0), + ('2024-07-11 20:00:08', 'host1', 'GetUser', 104.0), + ('2024-07-11 20:00:08', 'host2', 'GetUser', 96.0), + ('2024-07-11 20:00:09', 'host1', 'GetUser', 104.5), + ('2024-07-11 20:00:09', 'host2', 'GetUser', 114.0); + +Affected Rows: 8 + +SELECT ts, count(distinct host) RANGE '5s' as h FROM grpc_latencies ALIGN '5s' by (method_name); + ++---------------------+---+ +| ts | h | ++---------------------+---+ +| 2024-07-11T20:00:05 | 2 | ++---------------------+---+ + +SELECT ts, count(*) RANGE '5s' as h FROM grpc_latencies ALIGN '5s' by (method_name); + ++---------------------+---+ +| ts | h | ++---------------------+---+ +| 2024-07-11T20:00:05 | 8 | ++---------------------+---+ + +select date_bin(INTERVAL '5s', ts) as t, count(distinct host) as count from grpc_latencies group by t; + ++---------------------+-------+ +| t | count | ++---------------------+-------+ +| 2024-07-11T20:00:05 | 2 | ++---------------------+-------+ + +DROP TABLE grpc_latencies; + +Affected Rows: 0 + diff --git a/tests/cases/standalone/common/range/by.sql b/tests/cases/standalone/common/range/by.sql index fcf94c124b45..d41511373854 100644 --- a/tests/cases/standalone/common/range/by.sql +++ b/tests/cases/standalone/common/range/by.sql @@ -58,3 +58,29 @@ INSERT INTO TABLE host VALUES SELECT ts, max(val) RANGE '5s' FROM host ALIGN '20s' ORDER BY ts; DROP TABLE host; + +CREATE TABLE grpc_latencies ( + ts TIMESTAMP TIME INDEX, + host STRING, + method_name STRING, + latency DOUBLE, + PRIMARY KEY (host, method_name) +) with('append_mode'='true'); + +INSERT INTO grpc_latencies (ts, host, method_name, latency) VALUES + ('2024-07-11 20:00:06', 'host1', 'GetUser', 103.0), + ('2024-07-11 20:00:06', 'host2', 'GetUser', 113.0), + ('2024-07-11 20:00:07', 'host1', 'GetUser', 103.5), + ('2024-07-11 20:00:07', 'host2', 'GetUser', 107.0), + ('2024-07-11 20:00:08', 'host1', 'GetUser', 104.0), + ('2024-07-11 20:00:08', 'host2', 'GetUser', 96.0), + ('2024-07-11 20:00:09', 'host1', 'GetUser', 104.5), + ('2024-07-11 20:00:09', 'host2', 'GetUser', 114.0); + +SELECT ts, count(distinct host) RANGE '5s' as h FROM grpc_latencies ALIGN '5s' by (method_name); + +SELECT ts, count(*) RANGE '5s' as h FROM grpc_latencies ALIGN '5s' by (method_name); + +select date_bin(INTERVAL '5s', ts) as t, count(distinct host) as count from grpc_latencies group by t; + +DROP TABLE grpc_latencies;