0

目前我正在研究生成数据库的人口统计数据,并且我们geography在其中一个表中添加了数据类型。对于人口统计,我必须用其他东西生成列的最大值、最小值和平均值

使用

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 版本,并且我的表有一个地理类型的 Location 列和一个标识列。

4

2 回答 2

3

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

狗的最低限度是多少?

一个地理如何比另一个少或多?伦敦是否低于巴黎*?回答这个问题,你就会得到答案。猜测一下,我会说你的答案可能是STDistance函数。

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

于 2013-08-12T12:51:51.833 回答
0

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

SELECT x.* FROM 
(
    SELECT *
        , ROW_NUMBER() OVER (ORDER BY Location.Lat, Location.Long) RN
    FROM SpatialTable
) x
WHERE x.RN = 1
于 2013-08-12T11:50:33.130 回答