日期:2014-05-18 浏览次数:21127 次
----------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2011-12-07 08:48:14
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86)
-- Apr 22 2011 11:57:00
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)
--
----------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([A] int,[B] int,[C] int)
insert [tb]
select 123,222,23 union all
select 223,221,23 union all
select 223,256,26 union all
select 123,22,27 union all
select 123,126,29 union all
select 223,225,558 union all
select 223,256,25 union all
select 123,223,30
--------------开始查询--------------------------
select
distinct a.*
from
tb a,tb b
where
a.A in(select a from tb group by a having COUNT(1)>=3)
and
exists(select 1 from tb where a=b.A and a.C<=b.C-3)
and
a.A=b.A
----------------结果----------------------------
/* A B C
----------- ----------- -----------
123 22 27
123 222 23
223 221 23
223 256 25
223 256 26
(5 行受影响)
*/
------解决方案--------------------
上次的回答:
select a.* from tb a inner join(
select *
from tb a
where exists(select 1 from tb where a=a.a and c<>a.c and c-a.c between 1 and 3)
and exists(select 1 from tb where a=a.a and c<>a.c and a.c-c between 1 and 3)
)b on a.a=b.a and abs(a.c-b.c)<=3
不满足需求吗?
------解决方案--------------------
create table tb(A int,B int,C int)
insert into tb select 123,222,23
insert into tb select 223,221,23
insert into tb select 223,256,26
insert into tb select 123,22,27
insert into tb select 123,126,29
insert into tb select 223,225,558
insert into tb select 223,256,25
insert into tb select 123,223,30
go
select a.* from tb a inner join(
select a,c
from tb t
where exists(select 1 from tb where a=t.a and c<>t.c and c-t.c between 0 and 3 group by a having count(*)=2)
)b on a.a=b.a and a.c-b.c between 0 and 3
/*
A B C
----------- ----------- -----------
123 22 27
123 126 29
123 223 30
223 221 23
223 256 26
223 256 25
(6 行受影响)
*/
go
drop table tb