以一分钟为增量选择分钟平均值

时间:2014-03-14 07:59:47

标签: sql

我正试图想出一种在单个SQL中执行以下操作的方法。

我想在09:00到17:30之间以1分钟的增量选择所有时间而不使用for循环。有办法吗?

select avg(price), Date(timecolumn)
from table 
where Time(timeColumn) >= '09:00:00'
and Time(timeColumn) <= '09:01:00'

2 个答案:

答案 0 :(得分:2)

您必须按日期,小时和分钟进行分组。

SELECT AVG(price), DATE(timecolumn), HOUR(timecolumn), MINUTE(timecolumn)
FROM `table` 
WHERE TIME(timeColumn) >= '09:00:00' AND TIME(timeColumn) <= '17:01:00'
GROUP BY DATE(timecolumn), HOUR(timecolumn), MINUTE(timecolumn)

答案 1 :(得分:1)

我假设这里遇到的一大障碍是你想保留(并返回)零(或NULL)的行 - 也就是说,在table表中没有行的一分钟增量。

您可能需要考虑将数据库中的时间表添加到数据库中。类似的东西:

FullTime TIME,
Hour INT,
Minute INT,
Second INT

86400行可以精确到第二行,您可以在其上放置索引。

然后你可以加入这个表:

SELECT AVG(Price), DATE(timeColumn)
FROM times
LEFT OUTER JOIN myTable ON times.FullTime = myTable.timeColumn
WHERE times.timeColumn BETWEEN '09:00:00' AND '17:30:00'
AND times.Seconds = 0
GROUP BY times.FullTime