如何计算每30秒的平均值?以下是表结构
Price TTime
每分钟插入5-60条记录。时间由getDate()插入。我必须计算每30秒的平均值。
答案 0 :(得分:3)
你需要做两件事:
创建一个列(在SELECT结果中,而不在表格中),其中包含半分钟的时间;
使用AVG(价格)和GROUP BY:
计算价格的平均值SELECT <function returning half minutes from TTime> AS HalfMinute, AVG(Price) FROM <Table> GROUP BY HalfMinute`
我不知道SQL Server的时间函数。如果你可以在几秒钟内得到返回的时间,你可以使用SECONDS / 30。也许其他人可以在这里介绍细节。
答案 1 :(得分:0)
类似的东西:
SELECT
AVG(Price) AS AvgPrice,
COUNT(Price) AS CountPrice,
MIN(TTIME) AS PeriodBegin,
(SECOND(TTime) % 30) * 30 AS PeriodType /* either 0 or 30 */
FROM
PriceTable
GROUP BY
YEAR(TTime), MONTH(TTime), DAY(TTime), HOUR(TTime), MINUTE(TTime)
SECOND(TTime) % 30 /* either 0 or 1 */
ORDER BY
MIN(TTime)
取代:
GROUP BY
YEAR(TTime), MONTH(TTime), DAY(TTime), HOUR(TTime), MINUTE(TTime)
您也可以使用,例如:
GROUP BY
LEFT(CONVERT(varchar, TTime, 120), 16)
在任何情况下,这些都是调用表扫描的操作,因为它们不可索引。建议使用WHERE子句来确定有效的TTime范围。
您还可以创建一个包含计算日期('…:00.000'
或'…:30.000'
)的列,并在触发器的帮助下填充INSERT。在其上放置一个索引,GROUP BY,完成。