sql - 将重叠或连续的日期值与 match_recognize 相结合
问题描述
尝试使用 match_recognise 组合或合并重叠日期值时,我很难获得正确答案。以下链接中的示例解释了我正在尝试做的事情,但在某些情况下我的数据不足:
https://livesql.oracle.com/apex/livesql/file/tutorial_E4DB2E0Z0D5ZTUBGN6JWUPKAU.html
基本上我有一组数据,其中的日期值有时会相互重叠。可以重叠的日期范围没有限制,我会在日期中看到一些变化:
总之,这些是主要的变化:
- 只有一个单一的日期实例,所以会作为单行返回(例如来自分类器的 strt/a)
- 按顺序相互重叠的日期
- 相互重叠的日期,但也有一组日期大于所有其他日期
这是一个例子:
日期范围:
开始 | 结尾 |
---|---|
26-8-16 13:14:00 | 16 年 10 月 19 日 15:38:31 |
16 年 8 月 26 日 13:14:03 | 16 年 11 月 1 日 19:14:51 |
16 年 8 月 26 日 13:15:01 | 16 年 10 月 19 日 15:39:11 |
16 年 10 月 21 日 15:38:03 | 16 年 10 月 24 日 06:01:35 |
16 年 10 月 24 日 14:26:02 | 16 年 10 月 31 日 14:14:53 |
使用上面链接中代码的略微修改版本:
select *
from periods
match_recognize(
order by end_date, start_date
measures
first(start_date) start_date, last(end_date) end_date
, count(*) periods
, match_number() match_no
, classifier() class
one row per match
pattern( a b* )
define
b as start_date <= prev(end_date)
)
我得到以下信息:
开始日期 | 结束日期 | 期间 | MATCH_NO | 班级 |
---|---|---|---|---|
26-8-16 13:14:00 | 16 年 10 月 19 日 15:39:11 | 2 | 3 | 乙 |
16 年 10 月 21 日 15:38:03 | 16 年 10 月 24 日 06:01:35 | 1 | 4 | 一个 |
16 年 10 月 24 日 14:26:02 | 16 年 11 月 1 日 19:14:51 | 2 | 5 | 乙 |
我希望将 2016 年 8 月 26 日的最小开始日期和 2016 年 11 月 1 日的最大结束日期作为单行返回,以表示最小/最大开始和结束日期。
在使用代码时,我可以找到一种方法让它在这个例子中工作,但它反过来又破坏了其他例子。所以我认为我需要为它定义更多的模式来寻找,但是很难让它按照我想要的方式工作并理解我需要定义的模式。
提前致谢...
解决方案
推荐阅读
- android - 在 Deeplinking Android 中排除 URL
- java - JBoss Wildfly 在 jboss-cli 命令行模式下显示属性值
- python - 如何在 Django 和 Wagtail 中翻译 .js 文件
- python - 如何在 Pandas 中将 Nonetype 对象转换为字符串或 DataFrame
- powershell - 使用 Powershell 卸载应用程序
- firebase - 日期之间的 Firebase 查询
- kubernetes - Kubernetes 中仅通过 Ingress 访问的网络策略
- smtp - Office 365 SMTP
- ruby - Ruby 巨大的哈希和内存使用量
- apache-kafka - kafka 可以订阅 MQTT 主题吗