我想要在單個SQL中完成以下操作。以一分鐘爲增量選擇分鐘平均值
我想在9:00到17:30之間以1分鐘爲增量選擇所有時間,而不使用for循環。有沒有辦法做到這一點?
select avg(price), Date(timecolumn)
from table
where Time(timeColumn) >= '09:00:00'
and Time(timeColumn) <= '09:01:00'
我想要在單個SQL中完成以下操作。以一分鐘爲增量選擇分鐘平均值
我想在9:00到17:30之間以1分鐘爲增量選擇所有時間,而不使用for循環。有沒有辦法做到這一點?
select avg(price), Date(timecolumn)
from table
where Time(timeColumn) >= '09:00:00'
and Time(timeColumn) <= '09:01:00'
您可以通過日期,小時和分鐘必須組。
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)
當然,它很簡單,我不能立即看到解決方案:) – user2130951
@xdazz - 我不知道他在用什麼數據庫 - 但是投射一列或用(UPPER/LOWER等)修改將會消除索引(在informix中) - 因此導致查詢引擎對這個SELECT運行一個順序掃描。如果他/她正在使用的引擎的確如此,那麼可能會因爲大型記錄集而變慢 – Trent
我在這裏假設最大的障礙是你想保留(和返回)行的零(或空值) - 也就是說,在你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
偉大的解決方案,結合我現在使用的兩步法。 – user2130951
告訴我們你正在使用哪個數據庫系統。 –