我正试图想出一种在单个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'
答案 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