Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 - Fatal编程技术网

Mysql SQL:平均每小时、两次之间、几天内

Mysql SQL:平均每小时、两次之间、几天内,mysql,sql,group-by,Mysql,Sql,Group By,我有一个表,它有一个开始日期和一个结束日期列 我想检索过去几天中每小时这些时间戳之间的平均时间差,但仅检索上午9点到下午6点之间的时间差。我希望输出如下所示: elapsed hour ------------- 2.5 11 <--today at 11AM 1.7 10 2.4 9 1.9 18 <--this is yesterday 2.4 17 4.0 16 它很接近,但只返回三天前我想要的,而不是像我希望的那

我有一个表,它有一个开始日期和一个结束日期列

我想检索过去几天中每小时这些时间戳之间的平均时间差,但仅检索上午9点到下午6点之间的时间差。我希望输出如下所示:

elapsed  hour
-------------
2.5      11 <--today at 11AM
1.7      10
2.4      9
1.9      18 <--this is yesterday
2.4      17
4.0      16

它很接近,但只返回三天前我想要的,而不是像我希望的那样跨越几天。我使用的是mySQL 5.0,有人有什么想法吗?

如果你想要多天,你需要在
GROUP BY
子句中包含一天和一小时。目前,它是在多天内对同一小时的所有值求平均值。(今天的11、昨天的11等的值是平均值)

我没有一个简单的方法来测试它,但类似于:

SELECT 
    TRUNCATE(AVG(TIME_TO_SEC(TIMEDIFF(END_DATE, START_DATE))/60), 2) as elapsed,
    EXTRACT(DAY FROM END_DATE) as day,
    EXTRACT(HOUR FROM END_DATE) as hour
FROM 
    TIME_INFO
WHERE
    EXTRACT(HOUR FROM END_DATE) BETWEEN 9 AND 18 AND
    DATE(END_DATE) > CURDATE() - INTERVAL 3 DAY
GROUP BY 
    EXTRACT(DAY FROM END_DATE),
    EXTRACT(HOUR FROM END_DATE)
ORDER BY 
    END_DATE DESC
elapsed  date        hour
------------------------- 
2.5      2011/03/25  11 <--today at 11AM
1.7      2011/03/25  10
2.4      2011/03/25  9
1.9      2011/03/24  18 <--this is yesterday
2.4      2011/03/24  17
4.0      2011/03/24  16
如果您希望它跨月/年边界工作,您可能需要
日期(结束日期)
而不是
提取(结束日期的日期)
,在这种情况下,输出可能类似于:

SELECT 
    TRUNCATE(AVG(TIME_TO_SEC(TIMEDIFF(END_DATE, START_DATE))/60), 2) as elapsed,
    EXTRACT(DAY FROM END_DATE) as day,
    EXTRACT(HOUR FROM END_DATE) as hour
FROM 
    TIME_INFO
WHERE
    EXTRACT(HOUR FROM END_DATE) BETWEEN 9 AND 18 AND
    DATE(END_DATE) > CURDATE() - INTERVAL 3 DAY
GROUP BY 
    EXTRACT(DAY FROM END_DATE),
    EXTRACT(HOUR FROM END_DATE)
ORDER BY 
    END_DATE DESC
elapsed  date        hour
------------------------- 
2.5      2011/03/25  11 <--today at 11AM
1.7      2011/03/25  10
2.4      2011/03/25  9
1.9      2011/03/24  18 <--this is yesterday
2.4      2011/03/24  17
4.0      2011/03/24  16
经过的日期小时数
------------------------- 

2.5 2011/03/25 11是的,这成功了。如果我一直得到这样好的建议,我最终会找到SQL!多谢。