繁体   English   中英

我如何按时间间隔按组对sql查询中的结果进行分组?

[英]How I can group results in the sql query by groups with interval?

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

我想产生以下结果:

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

我想按“日期间隔”对具有相同值的结果进行分组。

为了达到这个结果,我需要写什么查询?

架构:

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)

尝试这个:

SELECT value, min(date) AS 'min date', max(date) AS 'max date'
FROM yourTable
GROUP BY round((hour(date)/8)+1,0),value

您的搜索结果似乎是按一天的几个季度进行分组的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM