外企一面试题目 - SQL SERVER 面试题

 In database pubs, I create a table test using statement as below, and I insert several row as below
create table test
( id int primary key );
go
  insert into test values (1 );
insert into test values (2 );
insert into test values (3 );
insert into test values (4 );
insert into test values (5 );
insert into test values (6 );
insert into test values (8 );
insert into test values (9 );
insert into test values (11);
insert into test values (12);
insert into test values (13);
insert into test values (14);
insert into test values (18);
insert into test values (19);
go
Now I want to list the result of the non-contignous row as below,how can I do it?
Missing after Missing before
------------- --------------
6       8
9       11
...
select bf.cur_id as missing_after,
  af.cur_id as missing_before
from 
(
  select  rank () over(  order by cur.id asc) as rownumber,
     
       bef.id as bef_id
    ,
      cur.id as cur_id,
    aft.id as aft_id
         
  from test cur
  left join test bef
  on cur.id=bef.id+1
  left join test aft
  on cur.id=aft.id-1
) bf
left join 
(
  select  rank () over(  order by cur.id asc) as rownumber,
     
       bef.id as bef_id
    ,
      cur.id as cur_id,
    aft.id as aft_id
         
  from test cur
  left join test bef
  on cur.id=bef.id+1
  left join test aft
  on cur.id=aft.id-1
) af
on bf.rownumber=af.rownumber-1
where af.cur_id-bf.cur_id<>1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dbLenis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值