sql - 基于分隔符行的增量值
问题描述
我希望能够在达到“分隔符行”时增加一个值。
举个例子; 零是分隔符行。
GROUP_ID
--------
1
1
1
0
1
1
0
1
1
1
我想要的是:
GROUP_ID
--------
1
1
1
0
2
2
0
3
3
3
当然,也可能存在异常情况,例如从零开始或连续的零。我认为 NTILE 可能很有用,因为它有类似的创建存储桶的想法。
select START_DATE, END_DATE, DTEDIF, GROUP_ID
FROM (select START_DATE,
END_DATE,
DTEDIF,
(CASE
WHEN DTEDIF <= 24 THEN
1
ELSE
0
END) GROUP_ID
FROM (select START_DATE,
END_DATE,
MONTHS_BETWEEN(END_DATE, START_DATE) as DTEDIF
from (select start_date,
LEAD(start_date, 1) OVER(order by start_date) as END_DATE
from (select sysdate start_date
from dual
union all
select add_months(sysdate, 12) dt
from dual --12
union all
select add_months(sysdate, 22) dt
from dual --10
union all
select add_months(sysdate, 40) dt
from dual --18
union all
select add_months(sysdate, 68) dt
from dual --28
union all
select add_months(sysdate, 70) dt
from dual --18
union all
select add_months(sysdate, 88) dt
from dual --18
union all
select add_months(sysdate, 118) dt
from dual --30
))));
解决方案
这是一种方法:计算每行之前的零数:
select t.*,
(case when group_id = 0 then group_id
else sum(case when group_id = 0 then 1 else 0 end) over (order by <ordering column>)
end) as new_group_id
from t;
SQL 表表示无序集。所以你的问题需要一个单独的列来表示数据的顺序。
推荐阅读
- jquery - 在内容上单击 -> 隐藏 div -> 隐藏不需要的物化日期选择器
- c++ - 我怎样才能有一个使用类的链表?
- angular - 了解ngrx/data的能力
- python - 从网站抓取动态变化图像的 URL
- python - 如何使用pyplot绘制时间?
- javascript - GHOST - 发布特征图像未显示在 index.hbs 中
- javascript - 节点js子进程超时
- java - Java Hashtable:一个键 - 两个值,如何获得它们?
- android - 函数的返回类型为 'Future
' 但不以返回语句结尾 - snakemake - 蛇制造。创建多个目标时如何从命令行传递目标