mysql - 查找mysql中最后一个序列的开始时间

标签 mysql sql group-by sequence

我有下表,其中状态 0 表示非事件设备,状态 1 表示事件设备。

CREATE TABLE `devices` (
  `id` int NOT NULL AUTO_INCREMENT,
  `state` int unsigned NOT NULL,
  `dt` datetime NOT NULL,
  `name` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
   PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO devices (state,name,dt) VALUES (1,'Alfa','2021-10-12 11:30:00');
INSERT INTO devices (state,name,dt) VALUES (0,'Alfa','2021-10-12 11:40:00');
INSERT INTO devices (state,name,dt) VALUES (1,'Alfa','2021-10-12 11:50:00');
INSERT INTO devices (state,name,dt) VALUES (1,'Alfa','2021-10-12 12:00:00');

INSERT INTO devices (state,name,dt) VALUES (1,'Beta','2021-10-12 11:30:00');
INSERT INTO devices (state,name,dt) VALUES (0,'Beta','2021-10-12 11:40:00');
INSERT INTO devices (state,name,dt) VALUES (0,'Beta','2021-10-12 11:50:00');
INSERT INTO devices (state,name,dt) VALUES (0,'Beta','2021-10-12 12:00:00');

http://sqlfiddle.com/#!9/8ea07de/3

查询的预期结果是:

Name    State   FROM                    TO
Alfa    1       '2021-10-12 11:50:00'   '2021-10-12 12:00:00'
Beta    0       '2021-10-12 11:40:00'   '2021-10-12 12:00:00'

目前我只能获取“name”、“to”和“state”列。 对于 MySQL 5.6,是否可以找到具有预期结果(“来自”列)的查询?

最佳答案

您可以使用下一个查询:

SET @state = -1; -- initial value not equal to real values
SET @dt = '';    -- initial value not equal to real dates

SELECT 
    name,
    state,
    from_dt,
    dt
FROM (
  -- get last dt by name
  SELECT name, max(dt) dt
  FROM devices
  GROUP BY name
) last_state
JOIN (
  SELECT 
    name,
    state,
    dt,
    -- store dt eachtime when state changes
    @dt := IF(@state <> state, dt, @dt) from_dt,
    @state := state
  FROM devices
  ORDER BY name, dt ASC
) first_state using (name, dt)
;

MySQL fiddle

关于mysql - 查找mysql中最后一个序列的开始时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69556831/

相关文章:

c# - SQL Server Decimal - 为什么我的十进制值只捕获小数点后两位小数?是的,它是小数(18,5)

MySQL GROUP BY 性能问题

r - 数据表中的.EACHI?

c# - cpanel远程连接mysql数据库

带有OUTFILE的MYSQL存储过程,txt文件中没有空格

mysql - 如何匹配对角线上两列(同一张表)的值,不匹配时显示结果

sql - Python/sqlite3:执行数千个“SELECT”查询时提高性能

mysql - 将表行值更新为另一个表中的随机行值

php - 如何从 MySQL 回显包含城市的行以及同一字段中为空的行?

R - 为重复购买分组日期和汇总数据