我有一个带有地理标记的值(经度、纬度、值)的SQL表。该表的累积速度很快,有数千个条目。因此,查询表中某些区域的值将返回非常大的数据集。
我想知道位置接近一个值的平均值的方法,这里有一个插图:
表:
Long lat value
10.123001 53.567001 10
10.123002 53.567002 12
10.123003 53.567003 18
10.124003 53.568003 13假设我现在的位置是10.123004,53.567004。如果我查询附近的值,我将得到值为10、12、18和13的四个raws。如果数据集相对较小,则此方法有效。如果数据很大,我想查询sql以获得四舍五入的位置(10.123,53.567),并需要sql返回如下内容
Long lat value
10.123 53.567 10 (this is the average of 10, 12, and 18)
10.124 53.568 13这个是可能的吗?我们如何根据位置对大数据集进行平均?
sql数据库首先是正确的选择吗?
发布于 2012-04-30 21:08:35
GROUP BY四舍五入的列,而AVG聚合函数应该可以很好地完成以下工作:
SELECT ROUND(Long, 3) Long,
ROUND(Lat, 3) Lat,
AVG(value)
FROM Table
GROUP BY ROUND(Long, 3), ROUND(Lat, 3) 根据需要添加WHERE子句以进行筛选。
发布于 2012-04-30 21:10:03
这里有一些粗略的伪代码,可能是一个开始。您需要在项目中使用的SQL方言中为round函数提供适当的精度参数,因此请理解,我提供的作为第二个参数的3是将数字四舍五入到的精度的小数位数,正如您的原始post所指示的那样。
选择舍入(纬度,3)、舍入(长,3)、平均值(值)按舍入分组(纬度,3)、舍入(长,3)
发布于 2012-04-30 22:30:29
四舍五入方法的问题是边界条件--当点接近边界时会发生什么。
但是,对于给定点的邻域,最好使用如下所示:
select *
from table
where long between @MyLong - @DeltaLong and @MyLong + @DeltaLong and
lat between @MyLat - @DeltaLat and @MyLat + @DeltaLat为此,您需要定义@DeltaLong和@DeltaLat。
如果这是您的问题,四舍五入可以很好地用于摘要。
https://stackoverflow.com/questions/10384076
复制相似问题