[英]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.