Back to Questdb

WITH keyword

documentation/query/sql/with.md

latest1.6 KB
Original Source

Supports Common Table Expressions (CTEs), e.i., naming one or several sub-queries to be used with a SELECT, INSERT, or UPDATE query.

Using a CTE makes it easy to simplify large or complex statements which involve sub-queries, particularly when such sub-queries are used several times.

Syntax

Where:

  • alias is the name given to the sub-query for ease of reusing
  • subQuery is a SQL query (e.g SELECT * FROM table)

Examples

questdb-sql
WITH first_10_users AS (SELECT * FROM users limit 10)
SELECT user_name FROM first_10_users;
questdb-sql
WITH first_10_users AS (SELECT * FROM users limit 10),
first_5_users AS (SELECT * FROM first_10_users limit 5)
SELECT user_name FROM first_5_users;
questdb-sql
WITH avg_price AS (SELECT avg(price) average FROM trades)
SELECT timestamp, trades.price > avg_price.average above_average
FROM trades CROSS JOIN avg_price;
questdb-sql
WITH up AS (
    SELECT symbol, spread, ts
    FROM temp_spreads
    WHERE timestamp between '2022-01-02' and '2022-01-03'
)
UPDATE spreads s
SET spread = up.spread
FROM up
WHERE up.ts = s.ts AND s.symbol = up.symbol;
questdb-sql
WITH up AS (
    SELECT symbol, spread, ts
    FROM temp_spreads
    WHERE timestamp between '2022-01-02' and '2022-01-03'
)
INSERT INTO spreads
SELECT * FROM up;