问题标签 [bi-temporal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在双时态数据集上计算移动平均线
我正在尝试计算双时态数据集的移动平均值。数据集由数据日期和生效日期(数据可用的日期)组成。该日期的数据将来可能会多次重述(数据日期相同但生效日期不同)。我需要使用对正在计算的行的生效日期有效的数据来计算过去 4 个季度的移动平均值。
数据集看起来像这样
ID | 数据日期 | 有效日期 | 价值 |
---|---|---|---|
1 | 2005-03-31 | 2005-04-15 | 10 |
1 | 2005-03-31 | 2005-05-30 | 11 |
1 | 2005-06-30 | 2005-07-15 | 9 |
1 | 2005-06-30 | 2005-08-20 | 9.5 |
1 | 2005-06-30 | 2005-10-15 | 9.6 |
1 | 2005-09-30 | 2005-10-15 | 10.5 |
1 | 2005-09-30 | 2005-11-10 | 11 |
1 | 2005-09-30 | 2006-02-20 | 10.75 |
1 | 2005-12-31 | 2006-02-13 | 12 |
1 | 2005-12-31 | 2006-02-20 | 11.6 |
1 | 2005-12-31 | 2006-05-10 | 11 |
1 | 2006-03-31 | 2006-04-20 | 8 |
1 | 2006-03-31 | 2006-05-10 | 8.25 |
结果应该是
ID | 数据日期 | 有效日期 | 价值 | 平均 | |
---|---|---|---|---|---|
0 | 1 | 2005-03-31 | 2005-04-15 | 10 | 10 |
1 | 1 | 2005-03-31 | 2005-05-30 | 11 | 11 |
2 | 1 | 2005-06-30 | 2005-07-15 | 9 | 10 |
3 | 1 | 2005-06-30 | 2005-08-20 | 9.5 | 10.25 |
4 | 1 | 2005-06-30 | 2005-10-15 | 9.6 | 10.30 |
5 | 1 | 2005-09-30 | 2005-10-15 | 10.5 | 10.37 |
6 | 1 | 2005-09-30 | 2005-11-10 | 11 | 10.53 |
7 | 1 | 2005-09-30 | 2006-02-20 | 10.75 | 10.45 |
8 | 1 | 2005-12-31 | 2006-02-13 | 12 | 10.9 |
9 | 1 | 2005-12-31 | 2006-02-20 | 11.5 | 10.71 |
10 | 1 | 2005-12-31 | 2006-05-10 | 11 | 10.59 |
11 | 1 | 2006-03-31 | 2006-04-20 | 8 | 9.96 |
12 | 1 | 2006-03-31 | 2006-05-10 | 8.25 | 9.9 |
我正在使用熊猫在 python 中执行此操作。我这样做的方式是通过在 id 和前 4 个季度上加入数据框,并根据过去 4 个季度的 effdates 计算所有时期的新 effdates,然后我再次加入 id、datadate 和 effdate 并计算平均值。
这很有效,但是当我在从 2000 年到最近一个季度(大约 500K 行)有大约 2000 个不同 id 和数据日期的完整数据集上运行它时它非常慢,我必须计算不同窗口的几个字段的移动平均值。所以我想看看是否有一种有效的方法来做到这一点。
oracle - SCHEMA 更改后如何避免中断临时表中的查询?
想象一下,我有一张个人信息的临时表:
- UUID (varchar)
- main_document (varchar)
- 名称(varchar)
- DoB(时间戳)
- 流派(varchar)
- 地址(varchar)
- 工资(十进制)
在T1我运行模式迁移并添加一个新列,从现在开始,表有:
- UUID (varchar)
- main_document (varchar)
- 名称(varchar)
- DoB(时间戳)
- 流派(varchar)
- 地址(varchar)
- 工资(十进制)
- 电子邮件(varchar)*
然后在T2运行另一个模式迁移并将 main_document 的数据类型更改为 NUMBER。
- UUID (varchar)
- main_document ( NUMBER )*
- 名称(varchar)
- DoB(时间戳)
- 流派(varchar)
- 地址(varchar)
- 工资(十进制)
- 电子邮件(varchar)
然后在T3我运行另一个模式迁移并删除流派列
- UUID (varchar)
- main_document(编号)
- 名称(varchar)
- DoB(时间戳)
- --------------- *
- 地址(varchar)
- 工资(十进制)
- 电子邮件(varchar)
然后在T4我运行另一个模式迁移并添加流派列,但现在它具有数据类型 NUMBER。
- UUID (varchar)
- main_document(编号)
- 名称(varchar)
- DoB(时间戳)
- 流派 (NUMBER) *
- 地址(varchar)
- 工资(十进制)
- 电子邮件(varchar)
如果架构在 T1、T2、T3、T4 等上发生更改,我如何查询我的数据库(及时返回)?
就像,我们在(墙上时间)T4并运行: select * from people AS OF T3,应该返回什么?真的是时间旅行吗?
是否有任何最佳实践或策略来避免这些临时表 + 模式迁移的所有这些复杂性?
任何帮助将非常感激。
谢谢