查询每30秒获得一次平均值

时间:2009-11-06 06:25:39

标签: sql sql-server

如何计算每30秒的平均值?以下是表结构

    Price  TTime

每分钟插入5-60条记录。时间由getDate()插入。我必须计算每30秒的平均值。

2 个答案:

答案 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,完成。