mysql - SQL,如何查找列值的变化

标签 mysql sql

我有一个包含两列的表,日期为 DateTime,值为 INT(有 3 个可能的值 1、2、3)

表格数据是这样的:

Date                     , Value
---------------------------------------
2016-01-01 10:34:00                1
2016-01-01 10:35:00                1
2016-01-01 10:36:00                1
2016-01-01 10:37:00                1
2016-01-01 10:38:00                1
2016-01-01 10:39:00                3
2016-01-01 10:40:00                3
2016-01-01 10:41:00                2
2016-01-01 10:42:00                2
2016-01-01 10:43:00                2
2016-01-01 10:44:00                1
2016-01-01 10:45:00                1
2016-01-01 10:46:00                1
2016-01-01 10:47:00                1

我需要一个 Sql 查询(特别是在 MySQL 中)来生成输出:

Start Date              ,  End Date            , value
---------------------------------
2016-01-01 10:34:00     , 2016-01-01 10:38:00  , 1
2016-01-01 10:39:00     , 2016-01-01 10:40:00  , 3
2016-01-01 10:41:00     , 2016-01-01 10:43:00  , 2
2016-01-01 10:44:00     , 2016-01-01 10:47:00  , 1

这可能吗? 请帮忙。谢谢

最佳答案

最快的方法是使用变量。您需要定义一个分组参数,每次值更改时该参数都会更改:

select min(date), max(date), value
from (select t.*,
             (@grp := if(@v = value, @grp,
                         if(@v := value, @grp + 1, @grp + 1)
                        )
             ) as grp
      from t cross join
           (select @grp := 0, @v := -1) params
      order by date
     ) t
group by grp, value;

关于mysql - SQL,如何查找列值的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912155/

相关文章:

php - 使用连接语句和子查询的 CakePHP 查询准备

MySQL服务器存储过程语法错误

sql - 如何在 PostgreSQL 中使用 RETURNING 子句?

php - 获取当前 session 的id

mysql工作台从其他数据库中选择

sql - 如何从 Oracle 中的日期中提取毫秒?

PHP/MySQL : Adding records based on foreign keys

sql - 如何从将多行返回到单个结果的查询中获得 "merge"、 "flatten"或 "pivot"结果?

mysql - 无论我做什么,Vaadin的combobox.select()都不起作用

mysql - 从匹配字符或字符串的表中获取列表