我需要根据以下逻辑为每个logging_time分配一个time_group:
记录时间 | 时间组(预计) |
---|---|
2023-12-10 17:03:05 | 2023-12-10 17:03:05 |
2023-12-10 17:05:02 | 2023-12-10 17:03:05 |
2023-12-10 17:06:18 | 2023-12-10 17:06:18 |
2023-12-10 17:10:07 | 2023-12-10 17:10:07 |
2023-12-11 08:31:27 | 2023-12-11 08:31:27 |
我一直在尝试在 BigQuery 中实现这一点,但我似乎无法实现所需的输出。
您可以使用 CTE 或带有 WINDOW 函数的子查询
LAG
来获得所需的结果。
我在 MySQL 中完成了此操作,您可能想要复制。
架构(MySQL v9)
CREATE TABLE LogTime (
logged_time DATETIME NOT NULL
);
-- Insert values into the LogTime table
INSERT INTO LogTime (logged_time) VALUES
('2023-12-10 17:03:05'),
('2023-12-10 17:05:02'),
('2023-12-10 17:06:18'),
('2023-12-10 17:10:07'),
('2023-12-11 08:31:27');
查询#1
WITH TEMP_TABLE AS (
SELECT
logged_time,
COALESCE(
if(LAG(logged_time) OVER w < logged_time - INTERVAL 3 MINUTE,
logged_time, LAG(logged_time) OVER w)
, logged_time) AS t_group
FROM
LogTime
WINDOW w AS (ORDER BY logged_time)
) -- SELECT * FROM TEMP_tABLE
SELECT
logged_time,
if(LAG(t_group) OVER() < logged_time - INTERVAL 3 MINUTE,
logged_time, t_group) AS time_group
FROM
TEMP_TABLE;
记录时间 | 时间组 |
---|---|
2023-12-10 17:03:05 | 2023-12-10 17:03:05 |
2023-12-10 17:05:02 | 2023-12-10 17:03:05 |
2023-12-10 17:06:18 | 2023-12-10 17:06:18 |
2023-12-10 17:10:07 | 2023-12-10 17:10:07 |
2023-12-11 08:31:27 | 2023-12-11 08:31:27 |