-- 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

推荐答案

使用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;

See the demo.

Mysql相关问答推荐

正则表达式转换为MYSQL格式

无条件理解MySQL中内连接和交叉连接的相似性

SQL - Select 复合主键,条件为其中一个主键

在MySQL和JavaFX中保存和检索图像文件

仅获取我不是最后一个 comments 者的博客帖子

MySQL工作台的编码问题

数据导入和默认目标架构空列表. (Mysql 工作台 8)

如何计算具有权重属性的记录数

for each 查询设置 MySQL @@session.time_zone 而不是 CONVERT_TZ 的缺点?

计算MySQL中的连续出现

优化解析 5000 万行 MySQL 表的请求

如何在 MYSQL 中使用多个表进行插值

为什么 fetch 方法不能获取任何东西?(feat node.js,restAPI)

插入重复键查询以在每一行上进行自定义更新

MySQL使用多列 Select 重复记录

mysql 按日期 Select 总和组

MySQL计算特定值的列

MySQL 删除多列

从 MySQL JSON 数据类型中提取不带引号的值

MySQL - 重复表