首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netezza:如何查找人员最近连续期间的MIN和MAX

Netezza:如何查找人员最近连续期间的MIN和MAX
EN

Stack Overflow用户
提问于 2020-10-16 16:23:59
回答 2查看 165关注 0票数 0

我有如下数据。需要查找最近连续期间内处于活动状态的人员的最小日期

场景1

代码语言:javascript
复制
NAME | STARTDATE        | END DATE
--------------------------------------

名称|2016-01| 31-DEC-2017名称| 01-JAN-2017 | 31-OCT-2018名称| 01-JAN-2018 | 31-DEC-2019名称| 01-JAN-2019 | 31-DEC-2020

我需要如下输出:

代码语言:javascript
复制
NAME | STARTDATE        | END DATE
--------------------------------------
MIKE | 01-01-2018       | 31-12-2020

场景2:-

代码语言:javascript
复制
NAME | STARTDATE        | END DATE
--------------------------------------

名称| 01-01-2016 | 31-DEC-2017名称| 01-01-2017 | 31-OCT-2018名称| 01-01-2018 | 31-DEC-2019名称| 01-01-2019 | 31-DEC-2020我需要输出为:

代码语言:javascript
复制
NAME | STARTDATE        | END DATE
--------------------------------------

名称| 01-01-2019 | 31-12-2020

所以基本上输出是该人员最近连续期间的MIN和MAX。

EN

回答 2

Stack Overflow用户

发布于 2020-10-16 19:30:04

嗯。。。我认为你可以用下面的逻辑来做到这一点:

代码语言:javascript
复制
select name, max(startdate), max_enddate
from (select t.*,
             lag(enddate) over (partition by name order by startdate) as prev_enddate,
             max(enddate) over (partition by name) as max_enddate
      from t
     ) t
where startdate <= prev_enddate + interval '1 day'
group by name, max_enddate;

子查询只获取前一个结束日期和overrall结束日期。

外部查询做两件事:

  • 筛选新的活动期间begins.
  • Aggregates的时间,以获取其发生的最新日期。

Here是一个db<>fiddle

票数 1
EN

Stack Overflow用户

发布于 2020-10-16 16:31:16

这是一个缝隙和岛屿的问题。这里有一种方法,它使用lag()和累积的sum()来构建组,然后根据每个name过滤第一个组

代码语言:javascript
复制
select name, min(startdate) startdate, max(enddate) enddate
from (
    select t.*, 
        sum(case when startdate = lag_enddate + interval '1 day' or lag_enddate is null then 0 else 1 end) over(partition by name order by startdate) grp
    from (
        select t.*, 
            lag(enddate) over(partition by name order by startdate) lag_enddate
        from mytable t
    ) t
) t
where grp = 0
group by name
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64385490

复制
相关文章

相似问题

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