SQLite 从 DATETIME 列值查询 5 分钟时间桶列

问题描述 投票:0回答:1

此要求针对 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
sql database sqlite
1个回答
0
投票

下面的 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' 进行格式化。

© www.soinside.com 2019 - 2024. All rights reserved.