我注意到SQL Server 2008的MAX / MIN聚合函数没有按预期的那样使用负数。
我正在使用纬度和经度值(很多都是负数#),我得到的结果似乎只是看绝对值。
SELECT
MAX(g.Geo_Lat) AS MaxLat, MAX(g.Geo_Long) AS MaxLong,
MIN(g.Geo_Lat) AS MinLat, MIN(g.Geo_Long) AS MinLong
FROM Geolocations g
以下是查询结果:
MaxLat MaxLong MinLat MinLong
38.3346412 -85.7667496 38.1579234 -85.5289429
请注意maxlong和minlong的结果不正确。
是否有一些解决方法(除了特殊的UDF)?
答案 0 :(得分:5)
数据类型和归类确定订单。
地理数据(例如存储为地理类型)可以与浮点值排序不同 - 但在这种情况下,它们不会。当您展示时,Gopegraphic类型不可排序,只有纬度和经度。但那些输出为浮动值。
您使用哪种数据类型会导致这种情况发生?在进行一些测试之后,我终于弄明白了。对于地理数据或任何包含负数的数字类型,它将按预期工作。
您将纬度和经度存储为文本数据 - 不是吗?
将它们作为花车投射。这将解决它。
答案 1 :(得分:3)
Max和Min聚合在SQL Server 2008中按预期工作。您能为Geolocations表提供列类型吗?
它取决于表格中的位置。随着越来越多的条目,它应该接近
MaxLat MaxLong MinLat MinLong
90 180 -90 -180
south pole far west of north pole far east of
prime meridian prime meridian
本子午线0度经过英国伦敦。 -180和180是与0相对的同一行。
如果您只有几行,请尝试将这些位置添加到您的表中:
insert into Geolocations (Geo_Lat, GeoLong) values(-180,-90)
insert into Geolocations (Geo_Lat, GeoLong) values(0,0)
insert into Geolocations (Geo_Lat, GeoLong) values(180,90)