在b

如何解决在b

monetdb中说(具体地说,是“ monetdbLite” R包的​​嵌入式版本),我有一个“事件”表,其中包含实体ID代码以及事件开始和结束日期,格式为:

| id  | start_date  | end_date   |
| 1   | 2010-01-01  | 2010-03-30 |
| 1   | 2010-04-01  | 2010-06-30 |
| 2   | 2018-04-01  | 2018-06-30 |
| ... | ...         | ...        |

该表包含约8000万行事件,可归因于约250万个唯一实体(ID值)。日期似乎与日历季度很吻合,但我尚未对其进行彻底检查,因此假定它们可以是任意的。但是,我至少已经对它们进行了合理检查,以确认它们的结束日期>开始日期。

我想生成一个表“ nonevent_qtrs”,列出列出ID已记录 no 事件的日历季度,例如

| id  | last_doq   |
| 1   | 2010-09-30 |
| 1   | 2010-12-31 |
| ... | ...        |
| 1   | 2018-06-30 |
| 2   | 2010-03-30 |
| ... | ...        |

(doq =季度的天)

如果事件的程度跨越了该季度的任何几天(包括开始日期和最后日期),那么我希望将其视为发生在该季度中。

为此,我制作了一个“日历表”;一个季度表“ qtrs”,涵盖“事件”中出现的日期的整个范围,其格式为:

| first_doq  | last_doq   |
| 2010-01-01 | 2010-03-30 |
| 2010-04-01 | 2010-06-30 |
| ...        | ...        |

并尝试使用非设备合并,如下所示:

create table nonevents
as select
    id,last_doq
from
    events
    full outer join
    qtrs
on
    start_date > last_doq or
    end_date < first_doq
group by
    id,last_doq

但这是a)效率极低,b)肯定是错误的,因为大多数ID在所有季度都被列为非重要事件。

如何生成我描述的表“ nonevent_qtrs”,其中包含每个ID没有事件的季度列表?

如果相关的话,最终用例是计算非事件的运行,以分析直到事件发生的时间的分析和预测。需要像游程长度编码这样的感觉。如果有比我上面描述的方法更直接的方法,那么我无所不能。我开始关注非事件运行的唯一原因是试图限制跨产品的规模。我还考虑过制作类似的东西:

| id  | last_doq   | event |
| 1   | 2010-01-31 | 1     |
| ... | ...        | ...   |
| 1   | 2018-06-30 | 0     |
| ... | ...        | ...   |

但是,尽管更有用,但由于所涉及数据的大小,这可能不可行。多种格式:

| id  | 2010-01-31 | ... | 2018-06-30 |
| 1   | 1          | ... | 0          |
| 2   | 0          | ... | 1          |
| ... | ...        | ... | ...        |

也很方便,但是由于monetdb是列存储,所以我不确定这是效率更高还是更低。

解决方法

让我假设您有一个季度表,其开始日期为季度,结束日期为季度。如果您想要存在的地方,则确实需要此。毕竟,您想倒退多长时间?

然后,您可以生成所有ID /四分之一组合并过滤掉存在的组合:

select i.id,q.*
from (select distinct id from events) i cross join
     quarters q left join
     events e
     on e.id = i.id and
        e.start_date <= q.quarter_end and
        e.end_date >= q.quarter_start
where e.id is null;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?