Mysql SQL:平均每小时、两次之间、几天内
我有一个表,它有一个开始日期和一个结束日期列 我想检索过去几天中每小时这些时间戳之间的平均时间差,但仅检索上午9点到下午6点之间的时间差。我希望输出如下所示: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 它很接近,但只返回三天前我想要的,而不是像我希望的那
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!多谢。