此要求针对 SQLite 数据库。
我创建了一个如下表。
-- Create TABLE
DROP TABLE IF EXISTS TABLE3;
CREATE TABLE TABLE3 (
DATETIME TEXT,
TIME_BUCKET TEXT
);
-- Insert data into TABLE
INSERT INTO TABLE3 (DATETIME, TIME_BUCKET) VALUES
('2024-01-09T10:33:06.987',''),
('2024-01-09T10:33:06.987',''),
('2024-01-09T10:34:07.006',''),
('2024-01-09T10:38:07.161',''),
('2024-01-09T10:39:10.061',''),
('2024-01-09T10:40:21.279',''),
('2024-01-09T10:44:21.317',''),
('2024-01-09T10:49:21.448',''),
('2024-01-09T10:51:05.673','');
-- Select data from Table
SELECT * FROM TABLE3;
DATETIME TIME_BUCKET
2024-01-09T10:33:06.987
2024-01-09T10:33:06.987
2024-01-09T10:34:07.006
2024-01-09T10:38:07.161
2024-01-09T10:39:10.061
2024-01-09T10:40:21.279
2024-01-09T10:44:21.317
2024-01-09T10:49:21.448
2024-01-09T10:51:05.673
现在我可以更新 TIME_BUCKET 列以具有 1 分钟时间段值,如下所示。
UPDATE TABLE3
SET TIME_BUCKET = strftime('%Y-%m-%d %H:%M:00', DATETIME);
SELECT * FROM TABLE3;
DATETIME TIME_BUCKET
2024-01-09T10:33:06.987 2024-01-09 10:33:00
2024-01-09T10:33:06.987 2024-01-09 10:33:00
2024-01-09T10:34:07.006 2024-01-09 10:34:00
2024-01-09T10:38:07.161 2024-01-09 10:38:00
2024-01-09T10:39:10.061 2024-01-09 10:39:00
2024-01-09T10:40:21.279 2024-01-09 10:40:00
2024-01-09T10:44:21.317 2024-01-09 10:44:00
2024-01-09T10:49:21.448 2024-01-09 10:49:00
2024-01-09T10:51:05.673 2024-01-09 10:51:00
但我无法更新 TIME_BUCKET 列以拥有 5 分钟的时间段。 我尝试了下面的查询,但它确实将 TIME_BUCKET 列的值设置为 NULL。
UPDATE TABLE3
SET TIME_BUCKET = strftime('%Y-%m-%d %H:%M:00', DATETIME, 'start of minute', '+5 minutes');
对于 strftime,“日/月/年的开始”有效;但“分钟/小时开始”不起作用。
基本上我想要如下的输出
SELECT * FROM TABLE3;
DATETIME TIME_BUCKET
2024-01-09T10:33:06.987 2024-01-09 10:30:00
2024-01-09T10:33:06.987 2024-01-09 10:30:00
2024-01-09T10:34:07.006 2024-01-09 10:30:00
2024-01-09T10:38:07.161 2024-01-09 10:35:00
2024-01-09T10:39:10.061 2024-01-09 10:35:00
2024-01-09T10:40:21.279 2024-01-09 10:40:00
2024-01-09T10:44:21.317 2024-01-09 10:40:00
2024-01-09T10:49:21.448 2024-01-09 10:45:00
2024-01-09T10:51:05.673 2024-01-09 10:50:00
下面的 SQLite 查询确实起作用了
UPDATE TABLE3
SET TIME_BUCKET = strftime('%Y-%m-%d %H:%M:00', strftime('%s', DATETIME) / 300 * 300, 'unixepoch') AS TIME_BUCKET;
在此查询中,strftime('%s', DATETIME) 将 DATETIME 转换为自纪元以来的秒数,然后执行整数除法和乘法以向下舍入到最近的 5 分钟间隔。最后,使用 strftime 和 'unixepoch' 进行格式化。