我有一个数据库,其中包含每0.1秒收集一次的记录,我需要对给定日期的数据进行时间平均,以达到每20分钟一次。因此,我需要返回一天的数据,平均为每20分钟,即24*3个值。
目前,我在一天中每隔20分钟对数据库进行一次单独的AVG调用,即24*3次调用。我与数据库的连接似乎有点慢(它是远程的),并且需要大约5分钟来完成所有的平均值。如果我访问一整天的数据,然后将其平均到每20分钟一次,这样做会不会更快?如果这有助于回答这个问题,我必须在平均之前对数据进行一些算术运算,即将几个表列相乘。
发布于 2010-01-12 22:54:30
您可以计算午夜以来的分钟数,如下所示:
datepart(hh,datecolumn)*60 + datepart(mi,datecolumn)如果你将其除以20,你会得到20分钟间隔的数字。例如,00:10落在区间0,00:30落在区间1,15:30落在区间46,依此类推。使用此公式,您可以按20分钟间隔分组,如下所示:
select
(datepart(hh,datecolumn)*60 + datepart(mi,datecolumn)) / 20 as IntervalNr
, avg(value)
from YourTable
group by (datepart(hh,datecolumn)*60 + datepart(mi,datecolumn)) / 20您可以在avg调用中进行数学运算,如下所示:
avg(col1 * col2 - col3 / col4)发布于 2010-01-12 22:49:58
一般来说,减少查询的数量是一个好主意。在查询中(即在数据库中)聚合和执行任何算法/过滤/分组,然后在服务器端(例如在PHP中)进行“迭代”计算。
发布于 2010-01-12 22:54:49
为了确定它是否会更快,应该对其进行测量。
然而,它应该更快,因为您连接到数据库的速度很慢,这样往返次数对总执行时间的影响就会更大。
https://stackoverflow.com/questions/2049724
复制相似问题