-- create
CREATE TABLE readings (
id INTEGER PRIMARY KEY,
date timestamp NOT NULL,
value int NOT NULL
);
-- insert
INSERT INTO readings VALUES (0001, '2023-02-22 10:00:00', '12');
INSERT INTO readings VALUES (0002, '2023-02-22 10:10:00', '13');
INSERT INTO readings VALUES (0003, '2023-02-22 10:20:00', '15');
INSERT INTO readings VALUES (0004, '2023-02-22 10:30:00', '11');
INSERT INTO readings VALUES (0005, '2023-02-22 10:40:00', '10');
INSERT INTO readings VALUES (0006, '2023-02-22 10:50:00', '11');
INSERT INTO readings VALUES (0007, '2023-02-22 11:00:00', '12');
INSERT INTO readings VALUES (0008, '2023-02-22 11:10:00', '14');
INSERT INTO readings VALUES (0009, '2023-02-22 11:20:00', '13');
INSERT INTO readings VALUES (00010, '2023-02-22 11:30:00', '8');
-- fetch
SELECT min(date), max(date) FROM readings WHERE VALUE >= 12 group by date
我想要一个值超过 12 的每批日期的最低(最小)和最晚(最大)时间的答案。
min max
-- 2023-02-22 10:00:00 -- 2023-02-22 10:20:00
-- 2023-02-22 11:00:00 -- 2023-02-22 11:20:00
我不相信这可以单独使用 SQL 来完成!谁能证明我错了?真正的约会并不是那么干净,相隔 10 分钟。
使用
SUM()
窗口函数创建你想要的组/批次然后聚合:
WITH cte AS (SELECT *, SUM(value < 12) OVER (ORDER BY date) AS grp FROM readings)
SELECT MIN(date) min_date,
MAX(date) max_date
FROM cte
WHERE value >= 12
GROUP BY grp;
查看演示。