Mysql 时间序列数据的最小值和最大值

问题描述 投票:0回答:1
-- 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 分钟。

https://onecompiler.com/mysql/3yyvzwwbj

mysql sql greatest-n-per-group
1个回答
1
投票

使用

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;

查看演示

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