Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 计算日期间隔之间的行数_Mysql_Date_Range - Fatal编程技术网

Mysql 计算日期间隔之间的行数

Mysql 计算日期间隔之间的行数,mysql,date,range,Mysql,Date,Range,我有一个表,其中有两列DATETIME列date\u start和date\u end。 现在我需要计算每个时间间隔内的发生次数,按分钟分组 样品 id date_start date_end 01 2014-01-01 08:10:28 2014-01-01 08:12:35 <-- 08:10, 08.11, 08.12 02 2014-01-01 08:10:58 2014-01-01 08:11:26 <-- 08:10,

我有一个表,其中有两列
DATETIME
date\u start
date\u end
。 现在我需要计算每个时间间隔内的发生次数,按分钟分组

样品

id   date_start            date_end
01   2014-01-01 08:10:28   2014-01-01 08:12:35   <-- 08:10, 08.11, 08.12 
02   2014-01-01 08:10:58   2014-01-01 08:11:26   <-- 08:10, 08.11
03   2014-01-01 08:11:04   2014-01-01 08:12:01   <-- 08:11, 08.12
04   2014-01-01 08:11:56   2014-01-01 08:11:58   <-- 08:11 
05   2014-01-01 08:12:06   2014-01-01 08:12:09   <-- 08:12
06   2014-01-01 08:14:06   2014-01-01 08:14:20   <-- 08:14

可能我需要一个临时表来存储每个间隔中的时间,以便我以后可以对它们进行分组…

试试这一个,用实际的表名替换
yourtable
(2次出现
yourtable

(此sqlfiddle包含与编辑问题之前相同的数据)

time               count
2014-01-01 08:10   2
2014-01-01 08:11   4
2014-01-01 08:12   3
2014-01-01 08:14   1
SELECT DATE_FORMAT(H.hardTime,'%Y-%m-%d %H:%i') as time,
       COUNT(*) as count
FROM
(SELECT DATE_FORMAT(MIN(T1.date_start),'%Y-%m-%d %H:%i:00') + INTERVAL V.value MINUTE as hardTime
 FROM yourtable T1
 ,(SELECT T1.value+T2.value+T3.value+T4.value+T5.value+T6.value+T7.value
         as value FROM 
   (SELECT 0 as value UNION SELECT 1)T1,
   (SELECT 0 as value UNION SELECT 2)T2,
   (SELECT 0 as value UNION SELECT 4)T3,
   (SELECT 0 as value UNION SELECT 8)T4,
   (SELECT 0 as value UNION SELECT 16)T5,
   (SELECT 0 as value UNION SELECT 32)T6,
   (SELECT 0 as value UNION SELECT 64)T7
  )V
 GROUP BY V.value
 )H
INNER JOIN yourTable Y
ON H.hardTime BETWEEN DATE_FORMAT(Y.date_start,'%Y-%m-%d %H:%i:00') 
                  AND DATE_FORMAT(Y.date_end,'%Y-%m-%d %H:%i:00')
GROUP BY H.hardTime
ORDER BY H.hardTime