比较SQL Server中的地理数据类型

时间:2013-08-12 11:07:42

标签: sql sql-server sql-server-2008-r2

目前我正致力于生成数据库的人口统计数据,我们在其中一个表中添加了geography数据类型。对于人口统计数据,我必须使用其他内容生成 max,min和avg 列。

使用

select MIN(Location) FROM SpatialTable

无效,因为地理数据类型无法比拟。

所以我使用了以下查询:

SELECT Location 
FROM SpatialTable 
WHERE Location.Lat IN (SELECT MIN(Location.Lat) 
                       FROM SpatialTable 
                       WHERE Location.Long IN (SELECT MIN(Location.Long) 
                                               FROM SpatialTable))

基本上选择具有最小经度的记录,然后在这些记录中选择具有最小纬度的记录。但这也可以通过其他方式完成,其中选择了第一个MIN纬度,其中选择MIN经度,如下所示:

SELECT 
    Location 
FROM 
    SpatialTable 
WHERE 
    Location.Long IN
        (SELECT MIN(Location.Long) 
         FROM SpatialTable 
         WHERE Location.Lat IN (SELECT MIN(Location.Lat) FROM SpatialTable))

可能产生不同的结果。

是否有精确的方法来比较地理数据。我正在使用SQL Server 2008 R2版本,我的表有一个地理类型的位置列和一个标识列。

2 个答案:

答案 0 :(得分:3)

要确定地理类型的最小值,首先必须定义最小值。地理的最低限度是多少?这就像问

  

狗的最小值是多少?

一个地理位置如何比另一个更少或更多?伦敦不到巴黎*?回答这个,你会得到答案。我猜你的答案可能是STDistance函数。

*不,它更大。任何fule都知道

答案 1 :(得分:0)

与地理位置无关,您可以使用ROW_NUMBER()函数在自定义条件下获取具有最小(或最大)值的行。

SELECT x.* FROM 
(
    SELECT *
        , ROW_NUMBER() OVER (ORDER BY Location.Lat, Location.Long) RN
    FROM SpatialTable
) x
WHERE x.RN = 1