--此例为 查询 连续3天或2天 存在的 电话。
其中Oracle 的 exists或 in 写法结果都对
informix 的 in 写法结果对,exists写法结果不对
create table lz_test(time varchar(10),day_number int,msisdn varchar(10));
insert into lz_test values('200803',1,'13800');
insert into lz_test values('200803',3,'13800');
insert into lz_test values('200803',2,'13800');
insert into lz_test values('200803',2,'13801');
insert into lz_test values('200803',4,'13804');
insert into lz_test values('200803',5,'13804');
insert into lz_test values('200803',7,'13804');
insert into lz_test values('200803',8,'13804');
insert into lz_test values('200803',6,'13802');
insert into lz_test values('200803',6,'13801');
insert into lz_test values('200803',7,'13801');
insert into lz_test values('200803',8,'13801');
--informix 错误
> select distinct msisdn from lz_test a
where time='200803'
and exists
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=3
);
msisdn
13800
13801
13802
3 row(s) retrieved.
> select distinct msisdn from lz_test a
where time='200803'
and msisdn in
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=3
);
msisdn
13800
13801
2 row(s) retrieved.
--错误
> select distinct msisdn from lz_test a
where time='200803'
and exists
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=2
);
msisdn
13800
13801
13802
13804
4 row(s) retrieved.
> select distinct msisdn from lz_test a
where time='200803'
and msisdn in
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=2
);
msisdn
13800
13801
13804
3 row(s) retrieved.
-- oracle
select distinct msisdn from lz_test a
where time='200803'
and exists
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=3
);
MSISDN
----------
13801
13800
select distinct msisdn from lz_test a
where time='200803'
and msisdn in
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=3
);
MSISDN
----------
13801
13800
select distinct msisdn from lz_test a
where time='200803'
and exists
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=2
);
MSISDN
----------
13801
13800
13804
> select distinct msisdn from lz_test a
where time='200803'
and msisdn in
( select msisdn from lz_test
where time='200803' and msisdn=a.msisdn
start with day_number=a.day_number
connect by prior day_number=day_number-1 and prior msisdn= msisdn
group by msisdn
having count(*)>=2
);
MSISDN
----------
13801
13800
13804
informix-exists error ??
最新推荐文章于 2023-06-29 23:52:29 发布