34,590
社区成员
发帖
与我相关
我的任务
分享
create table tb(val1 int,val2 int,val3 int,val4 int)
insert into tb values(1,6,8,9)
insert into tb values(1,2,3,4)
insert into tb values(1,3,5,7)
insert into tb values(5,6,7,8)
go
select * from tb where (val2-val1)*(val2-val1) + (val3-val2)*(val3-val2) + (val4-val3)*(val4-val3) in
(
select min(v1) from
(
select * ,
v1 = (val2-val1)*(val2-val1) + (val3-val2)*(val3-val2) + (val4-val3)*(val4-val3),
v2 = case when val1 < 5 then 1 else 0 end + case when val2 < 5 then 1 else 0 end + case when val3 < 5 then 1 else 0 end +case when val4 < 5 then 1 else 0 end from tb
) t
where v2 = 2
)
and case when val1 < 5 then 1 else 0 end + case when val2 < 5 then 1 else 0 end + case when val3 < 5 then 1 else 0 end +case when val4 < 5 then 1 else 0 end = 2
drop table tb
/*
val1 val2 val3 val4
----------- ----------- ----------- -----------
1 3 5 7
(所影响的行数为 1 行)
*/
--有三行数据方差为0,此法不可用.
create table tb(val1 int,val2 int,val3 int,val4 int)
insert into tb values(1,6,8,9)
insert into tb values(1,2,3,4)
insert into tb values(1,3,5,7)
insert into tb values(5,6,7,8)
go
select * , v1 = val2-val1 , v2 = val3-val2 , v3 = val4-val3 from tb
drop table tb
/*
val1 val2 val3 val4 v1 v2 v3
----------- ----------- ----------- ----------- ----------- ----------- -----------
1 6 8 9 5 2 1
1 2 3 4 1 1 1
1 3 5 7 2 2 2
5 6 7 8 1 1 1
(所影响的行数为 4 行)
*/