informix-exists error ??

--此例为 查询 连续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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值