加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 数据库 > MsSql > 正文

sql – 按名称和日期范围对数据进行分组

发布时间:2020-05-24 16:22:57 所属栏目:MsSql 来源:互联网
导读:我的oracle表中有数据,我的名字和日期范围如下: Name From ToLopes, Janine 07-Jun-17 16-Jul-17Lopes, Janine 17-Jul-17 23-Jul-17Lopes, Janine 24-Jul-17 31-Aug-17Baptista, Ma

我的oracle表中有数据,我的名字和日期范围如下:

Name                From        To
Lopes,Janine       07-Jun-17   16-Jul-17
Lopes,Janine       17-Jul-17   23-Jul-17
Lopes,Janine       24-Jul-17   31-Aug-17
Baptista,Maria     23-Dec-16   19-Feb-17
Deyak,Sr,Thomas    22-Jan-17   18-Apr-17
Deyak,Thomas    27-Apr-17   14-May-17
Deyak,Thomas    15-May-17   21-May-17
Deyak,Thomas    22-May-17   28-May-17
Deyak,Thomas    29-May-17   31-May-17
Serrentino,Joyce   18-Mar-17   30-Apr-17
More,Cathleen      30-Jul-17   13-Aug-17
More,Cathleen      14-Aug-17   20-Aug-17
More,Cathleen      21-Aug-17   27-Aug-17
More,Cathleen      28-Aug-17   03-Sep-17
More,Cathleen      04-Sep-17   10-Sep-17
More,Cathleen      11-Sep-17   24-Sep-17
Barrows,Michael    30-Jan-17   19-Mar-17
Barrows,Michael    20-Mar-17   26-Mar-17
Barrows,Michael    27-Mar-17   02-Apr-17
Barrows,Michael    03-Apr-17   07-Apr-17

主要是对于一个用户来说,日期比起日期大一个并且是连续的,但在某些情况下会破坏数据,所以我的输出应该如下所示:

Name                From            To
Lopes,Janine       07-Jun-17   31-Aug-17
Baptista,Thomas    27-Apr-17   31-May-17
Serrentino,Cathleen      30-Jul-17   24-Sep-17
Barrows,Michael    30-Jan-17   07-Apr-17

如果我做min(from)和max(to),我会放弃像Thomas这样的记录.
我该怎么写sql来获取我需要的数据.

解决方法

在Oracle 12.1及更高版本中,MATCH_RECOGNIZE子句可以快速完成这些要求.我从我的其他答案使用相同的设置和模拟数据(WITH子句),输出也是相同的.
select name,date_fr,date_to
from   inputs
match_recognize(
  partition by name
  order by date_fr
  measures a.date_fr     as date_fr,last(date_to) as date_to
  pattern ( a b* )
  define b as date_fr = prev(date_to) + 1
)
;

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读