gpt4 book ai didi

sql - Oracle - 沿间隔对值进行分组

转载 作者:行者123 更新时间:2023-12-04 12:45:58 25 4
gpt4 key购买 nike

我需要查询一个包含步骤 ID + 值的表。
结果将列出间隔及其相关值。
这里的间隔被定义为“连续的步骤 id,共享相同的数据值”。

我很难用文字描述它,所以请看这个:

从这张表

  Step ! Data
------------
1 ! A
2 ! A
3 ! A
5 ! A
6 ! B
10 ! A

我需要以下报告
  From ! To   ! Data
-------------------
1 ! 3 ! A
5 ! 5 ! A
6 ! null ! B
10 ! null ! A

我认为 Lead() 会在这里帮助我,但没有成功。

最佳答案

您可以通过生成一系列数字并从 step 中减去来做到这一点。 .当值是连续的时,这将是一个常量:

select min(step) as from_step, max(step) as to_step, data
from (select t.*,
row_number() over (partition by data order by step) as seqnum
from t
) t
group by (step - seqnum), data;

编辑:

不太清楚 NULL在哪里s 来自。如果我推测它们是每个值的最后一个值,您可以执行以下操作:
select min(step) as from_step,
(case when max(step) <> max_step then max(step) end) as to_step,
data
from (select t.*,
max(step) over (partition by data) as max_step
row_number() over (partition by data order by step) as seqnum
from t
) t
group by (step - seqnum), data, max_step;

关于sql - Oracle - 沿间隔对值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com