create table a(i integer, ts TIMESTAMP TIME INDEX); Affected Rows: 0 insert into a values (42, 1); Affected Rows: 1 with cte1 as (Select i as j from a) select * from cte1; +----+ | j | +----+ | 42 | +----+ with cte1 as (Select i as j from a) select x from cte1 t1(x); +----+ | x | +----+ | 42 | +----+ with cte1(xxx) as (Select i as j from a) select xxx from cte1; +-----+ | xxx | +-----+ | 42 | +-----+ with cte1(xxx) as (Select i as j from a) select x from cte1 t1(x); +----+ | x | +----+ | 42 | +----+ with cte1 as (Select i as j from a), cte2 as (select ref.j as k from cte1 as ref), cte3 as (select ref2.j+1 as i from cte1 as ref2) select * from cte2 , cte3; +----+----+ | k | i | +----+----+ | 42 | 43 | +----+----+ -- SQLNESS SORT_RESULT 3 1 with cte1 as (select i as j from a), cte2 as (select ref.j as k from cte1 as ref), cte3 as (select ref2.j+1 as i from cte1 as ref2) select * from cte2 union all select * FROM cte3 order by 1; +----+ | k | +----+ | 42 | | 43 | +----+ with cte1 as (select 42), cte1 as (select 42) select * FROM cte1; Error: 3000(PlanQuery), Failed to plan SQL: Error during planning: WITH query name "cte1" specified more than once -- reference to CTE before its actually defined, it's not supported by datafusion with cte3 as (select ref2.j as i from cte1 as ref2), cte1 as (Select i as j from a), cte2 as (select ref.j+1 as k from cte1 as ref) select * from cte2 union all select * FROM cte3; Error: 4001(TableNotFound), Failed to plan SQL: Table not found: greptime.public.cte1 with cte1 as (Select i as j from a) select * from cte1 cte11, cte1 cte12; +----+----+ | j | j | +----+----+ | 42 | 42 | +----+----+ with cte1 as (Select i as j from a) select * from cte1 where j = (select max(j) from cte1 as cte2); +----+ | j | +----+ | 42 | +----+ with cte1(x, y) as (select 42 a, 84 b) select zzz, y from cte1 t1(zzz, y); +-----+----+ | zzz | y | +-----+----+ | 42 | 84 | +-----+----+ SELECT 1 UNION ALL (WITH cte AS (SELECT 42) SELECT * FROM cte) order by 1; +----------+ | Int64(1) | +----------+ | 1 | | 42 | +----------+ WITH RECURSIVE cte(d) AS ( SELECT 1 UNION ALL (WITH c(d) AS (SELECT * FROM cte) SELECT d + 1 FROM c WHERE FALSE ) ) SELECT max(d) FROM cte; +------------+ | max(cte.d) | +------------+ | 1 | +------------+ -- Nested aliases is not supported in datafusion with cte (a) as ( select 1 ) select a as alias1, alias1 as alias2 from cte where alias2 > 0; Error: 3000(PlanQuery), Failed to plan SQL: No field named alias2. Valid fields are cte.a. drop table a; Affected Rows: 0 CREATE TABLE grpc_latencies ( ts TIMESTAMP TIME INDEX, host VARCHAR(255), latency FLOAT, PRIMARY KEY (host), ); Affected Rows: 0 INSERT INTO grpc_latencies VALUES ('2023-10-01 10:00:00', 'host1', 120), ('2023-10-01 10:00:00', 'host2', 150), ('2023-10-01 10:00:05', 'host1', 130); Affected Rows: 3 WITH latencies AS (SELECT ts, host, AVG(latency) RANGE '2s' AS avg_latency FROM grpc_latencies ALIGN '2s' BY (host) FILL PREV ) SELECT latencies.ts, AVG(latencies.avg_latency) FROM latencies GROUP BY latencies.ts ORDER BY latencies.ts; +---------------------+----------------------------+ | ts | avg(latencies.avg_latency) | +---------------------+----------------------------+ | 2023-10-01T10:00:00 | 135.0 | | 2023-10-01T10:00:02 | 120.0 | | 2023-10-01T10:00:04 | 130.0 | +---------------------+----------------------------+ DROP TABLE grpc_latencies; Affected Rows: 0