目前我正致力于生成数据库的人口统计数据,我们在其中一个表中添加了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版本,我的表有一个地理类型的位置列和一个标识列。
答案 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