求SQL语句

UserAD 2012-03-16 12:38:13
表PRO 里面有2个字段分别为X Y都为浮点型

我需要做的是算出里面谁与谁最近,找出第一个最近的在找第2个谁离他最近

用数学是X平方+Y平方 根号在排序一下就出来了,可是SQL语句我不会
...全文
83 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
山东蓝鸟贵薪 2012-03-17
  • 打赏
  • 举报
回复
测试中,
UserAD 2012-03-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 s11ss 的回复:]
写存储过程吧
[/Quote]

应该是要存储过程 我对SQL不熟啊,请帮帮忙
lpq213140808 2012-03-17
  • 打赏
  • 举报
回复
--创建表
create table MyPosTable(myname varchar(40),x float,y float,orderid int)

--初始化记录
insert into MyPosTable(myname,x,y) select 'a1',0.8,3
insert into MyPosTable(myname,x,y) select 'a2',1.2,2.3
insert into MyPosTable(myname,x,y) select 'a3',1.5,0.7
insert into MyPosTable(myname,x,y) select 'a4',2,1.3
insert into MyPosTable(myname,x,y) select 'a5',1.8,3.2
insert into MyPosTable(myname,x,y) select 'a6',2.8,1.5


--具体实现
declare @curX float,@curY float,@i int,@myname varchar(40)

--记录当前离上一个最近的坐标值
set @curX=0
set @curY=0
--排序号
set @i=1
--循环判断是否还有更新完排序号的记录
while exists(select top 1 myname from MyPosTable where orderid is null)
begin
--求出第一个离原点最近的点
select top 1 @myname=myname,@curX=x,@curY=y from MyPosTable
where orderid is null
order by SQRT(SQUARE(abs(x-@curx))+SQUARE(abs(y-@cury)))

--更新序号
update MyPosTable set orderid=@i where myname=@myname
--下一序号
set @i=@i+1
end

--输出
select * from MyPosTable order by orderid

lpq213140808 2012-03-17
  • 打赏
  • 举报
回复
必须要写存储过程才能实现
s11ss 2012-03-16
  • 打赏
  • 举报
回复
掉了个y,呵呵
select x,y,x*x+y*y a from PRO order by a desc
s11ss 2012-03-16
  • 打赏
  • 举报
回复
select x,x*x+y*y a from PRO order by a desc
s11ss 2012-03-16
  • 打赏
  • 举报
回复
写存储过程吧
UserAD 2012-03-16
  • 打赏
  • 举报
回复
X Y 字段里面有很多数据 数据为坐标 而这个坐标代表一个人的位置

人有N个,求谁离第0,0最近,然后在求谁离求出的第1个最近,就这样循环下去,说白了就是找谁离谁最近然后排序出来

s11ss 2012-03-16
  • 打赏
  • 举报
回复
LZ不要高估自己的表达能力和群众的理解能力,还是举例子吧!
s11ss 2012-03-16
  • 打赏
  • 举报
回复
算谁与谁最近,为啥“不要X-所有X Y-所有Y然后在根号”
我看见佛 2012-03-16
  • 打赏
  • 举报
回复
select x,y,x*x+y*y a from PRO order by a asc

??
UserAD 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 s11ss 的回复:]
掉了个y,呵呵
select x,y,x*x+y*y a from PRO order by a desc
[/Quote]

你这个只是算出根号,排序不对,排序要根据最小的一个,然后再去找离她最近的一个是谁,不要X-所有X Y-所有Y然后在根号,谁最小找到谁

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧