Luis007

数据准备

 1 create table sequence
 2 (
 3 seq int not null primary key
 4 );
 5 
 6 insert into values(3);
 7 insert into values(4);
 8 insert into values(5);
 9 insert into values(6);
10 insert into values(7);
11 insert into values(8);
12 insert into values(10);
13 insert into values(11);
14 insert into values(15);
15 insert into values(16);
16 insert into values(17);
17 insert into values(20);
18 insert into values(22);
19 insert into values(23);
20 insert into values(24);
21 insert into values(28);
22 insert into values(30);
23 insert into values(31);

如何要查找长度为4的区间首数和尾数,即@n=4

解决方案一:

select S1.seq as start,S1.seq+@n-1 as end
from sequence as S1 cross join sequence as S2 cross join sequence as S3
where S2.seq = S1.seq+@n-1
group by S1.seq
having sum(case when S3.seq >S1.seq and S3.seq<=S2.seq then 1 else 0 end)=3;
View Code

此方案用到了自联接,where条件决定了起点和终点,group by 子句用于生成递归集合,还需要一个能够描述区间内部各个点需要满足的条件,为此增加一个自联接表S3,having子句针对子集内元素个数作出约束,符合约束的集合将被取出。

1 +-------+-----+
2 | start | end |
3 +-------+-----+
4 |     3  |   6 |
5 |     4  |   7 |
6 |     5  |   8 |
7 |    15 |  18 |
8 +-------+-----+
结果

 

分类:

MySQL

技术点:

相关文章:

  • 2021-06-04
  • 2021-09-10
  • 2021-11-20
  • 2021-07-05
  • 2021-09-07
猜你喜欢
  • 2021-07-13
  • 2021-08-07
  • 2022-01-25
  • 2022-03-10
  • 2021-08-08
  • 2022-01-19
  • 2021-08-01
相关资源
相似解决方案