首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间序列数据上的孤岛和间隙问题

时间序列数据上的孤岛和间隙问题
EN

Stack Overflow用户
提问于 2021-01-28 23:20:51
回答 1查看 72关注 0票数 1

我有一个样本数据,我一直在尝试获取所需的数据,如下所示。我也能够实现某种类型的岛和差距解决方案。这是我接近预期数据的最接近的版本。

代码语言:javascript
复制
DROP TABLE IF EXISTS #data
CREATE TABLE #data(
    factor varchar(50),
    val int,
    [start_date] date, [end_date] date
)
Go
INSERT INTO #data VALUES
('a', 15, '2021-01-01', '2021-01-05'),
('a', 15, '2021-01-08', '2021-01-10'),
('a', 20, '2021-01-11', '2021-01-20'),
('a', 15, '2021-01-21', '2099-01-01'),
('b', 10, '2021-01-01', '2021-01-04'),
('b', 12, '2021-01-05', '2021-01-13'),
('b', 12, '2021-01-17', '2021-01-19'),
('b', 12, '2021-01-20', '2021-01-23'),
('b', 10, '2021-01-24', '2099-01-01');

WITH value_cte As (
    SELECT * ,
    RANK() OVER(PARTITION BY factor ORDER BY [start_date]) - RANK() OVER(PARTITION BY factor, val ORDER BY [start_date]) grp
    FROM #data

)
SELECT factor, val, MIN(start_date) st, MAX(end_date) ed
FROM value_cte
GROUP BY factor, val, grp
ORDER BY factor, st

以上查询的结果:

预期结果:

代码语言:javascript
复制
factor  val st          ed
a       15  2021-01-01  2021-01-05
a       15  2021-01-08  2021-01-10
a       20  2021-01-11  2021-01-20
a       15  2021-01-21  2099-01-01
b       10  2021-01-01  2021-01-04
b       12  2021-01-05  2021-01-13
b       12  2021-01-17  2021-01-23
b       10  2021-01-24  2099-01-01

即使两个连续的岛的值是相同的,并且存在间隙,则不应合并该间隙,如果两个岛是连续的,则应合并它们。不幸的是,我不能在这里更改源代码(示例数据结构)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-28 23:51:22

您可以使用lag()来确定“岛”的起点--也就是没有重叠的地方。然后使用基于日期算法的累积和:

代码语言:javascript
复制
select factor, val, min(start_date), max(end_date)
from (select d.*,
             sum(case when prev_end_date >= dateadd(day, -1, start_date) then 0 else 1 end) over (partition by factor, val order by start_date) as grp
      from (select d.*,
                   lag(end_date) over (partition by factor, val order by start_date) as prev_end_date
            from data d
           ) d
     ) d
group by factor, val, grp
order by factor, min(start_date);

Here是一个SQL。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65940060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档