我有一个包含两列的表,日期为 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/