10.3 定位连续值范围的开始点和结束点
Posted 长城之上是千亿的星空,星空之上是不灭的守望。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.3 定位连续值范围的开始点和结束点相关的知识,希望对你有一定的参考价值。
drop view v;
create table v (
proj_id int(2),
proj_start date,
proj_end date);
insert into v values(1,‘2005-03-01‘,‘2005-03-02‘);
insert into v values(2,‘2005-03-02‘,‘2005-03-03‘);
insert into v values(3,‘2005-03-03‘,‘2005-03-04‘);
insert into v values(4,‘2005-03-04‘,‘2005-03-05‘);
insert into v values(5,‘2005-03-05‘,‘2005-03-07‘);
insert into v values(6,‘2005-03-06‘,‘2005-03-17‘);
insert into v values(7,‘2005-03-17‘,‘2005-03-18‘);
insert into v values(8,‘2005-03-18‘,‘2005-03-19‘);
insert into v values(9,‘2005-03-19‘,‘2005-03-20‘);
insert into v values(10,‘2005-03-21‘,‘2005-03-22‘);
insert into v values(11,‘2005-03-26‘,‘2005-03-27‘);
insert into v values(12,‘2005-03-27‘,‘2005-03-28‘);
insert into v values(13,‘2005-03-28‘,‘2005-03-29‘);
insert into v values(14,‘2005-03-29‘,‘2005-03-30‘);
create view v2
as
select a.*,case when (
select b.proj_id from v b
where a.proj_start = b.proj_end
)
is not null then 0 else 1
end as flag
from v a;
mysql> select * from v2;
+---------+------------+------------+------+
| proj_id | proj_start | proj_end | flag |
+---------+------------+------------+------+
| 1 | 2005-03-01 | 2005-03-02 | 1 |
| 2 | 2005-03-02 | 2005-03-03 | 0 |
| 3 | 2005-03-03 | 2005-03-04 | 0 |
| 4 | 2005-03-04 | 2005-03-05 | 0 |
| 5 | 2005-03-05 | 2005-03-07 | 0 |
| 6 | 2005-03-06 | 2005-03-17 | 1 |
| 7 | 2005-03-17 | 2005-03-18 | 0 |
| 8 | 2005-03-18 | 2005-03-19 | 0 |
| 9 | 2005-03-19 | 2005-03-20 | 0 |
| 10 | 2005-03-21 | 2005-03-22 | 1 |
| 11 | 2005-03-26 | 2005-03-27 | 1 |
| 12 | 2005-03-27 | 2005-03-28 | 0 |
| 13 | 2005-03-28 | 2005-03-29 | 0 |
| 14 | 2005-03-29 | 2005-03-30 | 0 |
+---------+------------+------------+------+
select a.proj_id,a.proj_start,a.proj_end,
(select sum(b.flag)
from v2 b
where b.proj_id <=a.proj_id ) as proj_prp
from v2 a;
以上是关于10.3 定位连续值范围的开始点和结束点的主要内容,如果未能解决你的问题,请参考以下文章
SQL (Redshift) 获取给定列中连续数据的开始值和结束值