mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-08-18 03:58:29 +00:00
5f6b88b782
Signed-off-by: discord9 <discord9@163.com>
56 lines
2.1 KiB
SQL
56 lines
2.1 KiB
SQL
CREATE TABLE now_boundary_input (
|
|
ts TIMESTAMP(3) TIME INDEX,
|
|
v DOUBLE,
|
|
PRIMARY KEY(v)
|
|
);
|
|
|
|
CREATE FLOW now_boundary_flow
|
|
SINK TO now_boundary_sink
|
|
EVAL INTERVAL '1s'
|
|
AS
|
|
SELECT
|
|
date_bin(INTERVAL '1 second', ts) AS window_start,
|
|
count(v) AS value_count,
|
|
now() AS create_time,
|
|
current_timestamp() AS cur_ts
|
|
FROM now_boundary_input
|
|
WHERE ts >= date_trunc('second', now()) - INTERVAL '1 second'
|
|
AND ts < date_trunc('second', current_timestamp())
|
|
GROUP BY date_bin(INTERVAL '1 second', ts);
|
|
|
|
INSERT INTO now_boundary_input VALUES
|
|
(date_trunc('second', now()) - INTERVAL '1 second', 0.0),
|
|
(date_trunc('second', now()), 1.0),
|
|
(date_trunc('second', now()) + INTERVAL '1 second', 2.0),
|
|
(date_trunc('second', now()) + INTERVAL '2 seconds', 3.0),
|
|
(date_trunc('second', now()) + INTERVAL '3 seconds', 4.0),
|
|
(date_trunc('second', now()) + INTERVAL '4 seconds', 5.0),
|
|
(date_trunc('second', now()) + INTERVAL '5 seconds', 6.0),
|
|
(date_trunc('second', now()) + INTERVAL '6 seconds', 7.0),
|
|
(date_trunc('second', now()) + INTERVAL '7 seconds', 8.0);
|
|
|
|
-- SQLNESS SLEEP 4s
|
|
SELECT
|
|
count(DISTINCT window_start) >= 1 AS has_selected_window,
|
|
min(value_count) AS min_value_count,
|
|
max(value_count) AS max_value_count,
|
|
bool_and(create_time = date_trunc('second', create_time)) AS all_create_time_at_second_boundary,
|
|
bool_and(cur_ts = create_time) AS cur_ts_equals_create_time,
|
|
bool_and(window_start = create_time - INTERVAL '1 second') AS all_windows_match_scheduled_previous_second
|
|
FROM now_boundary_sink
|
|
WHERE value_count > 0;
|
|
|
|
-- The WHERE clause should select exactly the previous scheduled second.
|
|
-- It intentionally uses both now() and current_timestamp() in filter bounds.
|
|
-- If the distributed analyzer folds now()/current_timestamp() with wall-clock time, the remote
|
|
-- filter shifts forward and this invariant fails: window_start becomes equal
|
|
-- to create_time instead of create_time - 1s.
|
|
SELECT
|
|
bool_and(value_count = 1) AS all_value_count_equals_one
|
|
FROM now_boundary_sink
|
|
WHERE value_count > 0;
|
|
|
|
DROP FLOW now_boundary_flow;
|
|
DROP TABLE now_boundary_sink;
|
|
DROP TABLE now_boundary_input;
|