我有一个包含三个字段的表。组号,X-coord和Y-coord。每个组号中可以有0到10行。
我想要做的是计算每组内各点之间的最大和最小距离。显然,如果该组中有2行或更多行,这只会给你一个值。
输出应包括字段:组号,minDistance,maxDistance。
游标是否是一个很好的解决方案?
(坐标在WGS84中,我有一个计算距离的工作公式)
我使用游标的原因是我无法避免为每个组进行交叉连接,然后对交叉连接的每个结果应用公式。
答案 0 :(得分:0)
我不会在你的情况下使用游标,但最好是在参数中使用所需组号的标量用户定义函数,并计算UDF中该组的最大距离。
请注意,函数内部的计算算法比您的计算算法简单得多。
create table dist (groupId int, X int, Y int)
insert into dist(groupid, x, y) values (1,14,20),(1,11,20),(1,10,22),(1,12,24),(1,11,28),(1,19,78)
insert into dist(groupid, x, y) values (2,10,20),(2,11,20),(2,10,22),(2,12,24),(2,11,28),(2,17,52)
create function dbo.getMinMaxDistanceForGroup (@groupId int)
returns table as return (
select MIN(SQRT(SQUARE(b.X - a.X) + SQUARE(b.Y - a.Y))) MinDistance,
MAX(SQRT(SQUARE(b.X - a.X) + SQUARE(b.Y - a.Y))) MaxDistance
from dist a cross join dist b
where a.groupId = @groupId and b.groupId = @groupId
)
select groupId, MinDistance, MaxDistance
from dist OUTER APPLY dbo.getMinMaxDistanceForGroup(groupId)
group by groupid, MinDistance, MaxDistance