Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何按间隔分组sql查询中的结果?_Mysql_Sql_Group By_Grouping - Fatal编程技术网

Mysql 如何按间隔分组sql查询中的结果?

Mysql 如何按间隔分组sql查询中的结果?,mysql,sql,group-by,grouping,Mysql,Sql,Group By,Grouping,我在mysql表中有以下数据 |id|value|date| |1|88|2015-08-26 08:00:00| |2|88|2015-08-26 09:00:00| |3|76|2015-08-26 10:00:00| |4|76|2015-08-26 11:00:00| |5|88|2015-08-26 12:00:00| |6|76|2015-08-26 13:00:00| |7|76|2015-08-26 14:00:00| |8|76|2015-08-26 15:00:00| |9|

我在mysql表中有以下数据

|id|value|date| |1|88|2015-08-26 08:00:00| |2|88|2015-08-26 09:00:00| |3|76|2015-08-26 10:00:00| |4|76|2015-08-26 11:00:00| |5|88|2015-08-26 12:00:00| |6|76|2015-08-26 13:00:00| |7|76|2015-08-26 14:00:00| |8|76|2015-08-26 15:00:00| |9|94|2015-08-26 16:00:00| |10|94|2015-08-26 17:00:00| |11|63|2015-08-26 18:00:00| |12|94|2015-08-26 19:00:00| |id |值|日期| |1|88|2015-08-26 08:00:00| |2|88|2015-08-26 09:00:00| |3|76|2015-08-26 10:00:00| |4|76|2015-08-26 11:00:00| |5|88|2015-08-26 12:00:00| |6|76|2015-08-26 13:00:00| |7|76|2015-08-26 14:00:00| |8|76|2015-08-26 15:00:00| |9|94|2015-08-26 16:00:00| |10|94|2015-08-26 17:00:00| |11|63|2015-08-26 18:00:00| |12|94|2015-08-26 19:00:00| 我希望生成以下结果:

|value|min date|max date| |88|2015-08-26 08:00:00|2015-08-26 09:00:00| |76|2015-08-26 10:00:00|2015-08-26 11:00:00| |88|2015-08-26 12:00:00|2015-08-26 12:00:00| |76|2015-08-26 13:00:00|2015-08-26 15:00:00| |94|2015-08-26 16:00:00|2015-08-26 17:00:00| |63|2015-08-26 18:00:00|2015-08-26 18:00:00| |94|2015-08-26 19:00:00|2015-08-26 19:00:00| |值|最小日期|最大日期| |88|2015-08-26 08:00:00|2015-08-26 09:00:00| |76|2015-08-26 10:00:00|2015-08-26 11:00:00| |88|2015-08-26 12:00:00|2015-08-26 12:00:00| |76|2015-08-26 13:00:00|2015-08-26 15:00:00| |94|2015-08-26 16:00:00|2015-08-26 17:00:00| |63|2015-08-26 18:00:00|2015-08-26 18:00:00| |94|2015-08-26 19:00:00|2015-08-26 19:00:00| 我想按“日期间隔”对具有相同值的结果进行分组

要获得此结果,我需要编写什么查询?

尝试以下操作:

SELECT value, min(date) AS 'min date', max(date) AS 'max date'
FROM yourTable
GROUP BY round((hour(date)/8)+1,0),value
您的结果似乎是按一天中的季度分组的。

Schema: 查询:
你能描述一下“按日期间隔分组”的含义吗?定义如下。如果同一id与其相邻(按主键顺序),则将其分组。输入:Variables@jarlh我认为他的表必须进行查询的唯一状态是
id
date
的组合。是的,我后来意识到OP要求一个时间表,从8:00到19:00。@GordonLinoff请看一下这个问题,谢谢。我非常喜欢group by 1和order by 1,2。。。。直到我的同龄人看到它。然后所有的麻烦都爆发了我喜欢这样做
create table thing1
(   id int not null,
    value int not null,
    dt datetime not null
);
insert thing1 (id,value,dt) values
(1,88,'2015-08-26 08:00:00'),
(2,88,'2015-08-26 09:00:00'),
(3,76,'2015-08-26 10:00:00'),
(4,76,'2015-08-26 11:00:00'),
(5,88,'2015-08-26 12:00:00'),
(6,76,'2015-08-26 13:00:00'),
(7,76,'2015-08-26 14:00:00'),
(8,76,'2015-08-26 15:00:00'),
(9,94,'2015-08-26 16:00:00'),
(10,94,'2015-08-26 17:00:00'),
(11,63,'2015-08-26 18:00:00'),
(12,94,'2015-08-26 19:00:00');
set @grp := 0, @value:=0;
select value,min(dt) as min_date,max(dt) as max_date
from 
( 
  select id,value,dt,
      @grp := if(@value <> value, @grp + 1, @grp) as grouping,
      @value := value as drewisdummy
  from thing1
  order by id
) xxx
group by grouping
+-------+---------------------+---------------------+
| value | min_date            | max_date            |
+-------+---------------------+---------------------+
|    88 | 2015-08-26 08:00:00 | 2015-08-26 09:00:00 |
|    76 | 2015-08-26 10:00:00 | 2015-08-26 11:00:00 |
|    88 | 2015-08-26 12:00:00 | 2015-08-26 12:00:00 |
|    76 | 2015-08-26 13:00:00 | 2015-08-26 15:00:00 |
|    94 | 2015-08-26 16:00:00 | 2015-08-26 17:00:00 |
|    63 | 2015-08-26 18:00:00 | 2015-08-26 18:00:00 |
|    94 | 2015-08-26 19:00:00 | 2015-08-26 19:00:00 |
+-------+---------------------+---------------------+
7 rows in set (0.00 sec)