我希望根据两个坐标检查最接近的坐标集,与表格中的任何一组坐标进行对比。
我有一个包含5列数据的表。 colB
和colC
具有非连续值。
colB colC
12.54 -87.36
41.25 68.56
55.98 -82.45
40.12 78.52
colA
是主键
我需要向查询传递两个值,例如colB
值为40.81,colC
值为75.56。
然后确定四个值之差的最接近记录。在此示例中,colB
的rec 2和4之间的差异将根据传入的值40.81进行检查。因此,41.25 - 40.81 = .44和40.81 - 40.12 = .69所以在这种情况下,记录2更接近,我需要返回记录2的所有字段。
如果有人可以帮助我接近解决这个T-SQL查询,我想我可以完成要求的下一部分,重复colC
值的过程。
答案 0 :(得分:1)
我会这样做 - 但我得到的结果是最接近的:
declare @example table
(
colA bigint not null identity(1,1) primary key clustered
, colB numeric(18,9)
, colC numeric(18,9)
)
insert @example select 12.54, -87.36
insert @example select 41.25, 68.56
insert @example select 55.98, -82.45
insert @example select 40.12, 78.52
declare @B numeric(18,9) = 40.81
, @C numeric(18,9) = 75.56
select top 1 *
from @example
order by power(@B - colB, 2) + power(@C - colC, 2)
<强>替代强> 以上为您提供了B和C中最小差异的记录。如果您想要B或C中的最小差异,请使用以下内容:
select top 1 *
from @example
order by
case
when abs(@B - colB) < abs(@C - colC)
then abs(@B - colB)
else
abs(@C - colC)
end
答案 1 :(得分:0)
我假设您的列的数据类型为float。您要查找的是传入值与colB值之差的最低绝对值。这是我的简单解决方案,可能不是最高效的:
DECLARE @value float = 40.81;
SELECT TOP 1 *
FROM MyTable m
ORDER BY ABS(colB-@value);
答案 2 :(得分:0)