时间点与持续时间建模:原理、应用与挑战
1. 获取当前状态
在处理无持续时间上限和有效性上限,且下一状态会终止其直接前一状态的情况时,识别和获取当前有效状态至关重要。可以通过将各个状态按对象划分为分区组来实现。
获取每个对象的当前状态,可使用 RANK 分析函数为每个对象的结果集服务。示例代码如下:
SELECT ID, BD, DATA
FROM
(SELECT tab.*,
RANK() over(PARTITION BY ID ORDER BY BD desc)
as rank
FROM Tab
)
WHERE rank=1;
此语句为每个对象( ID )生成最新的数据版本。也可以使用聚合来实现,示例代码如下:
SELECT *
FROM Tab
WHERE (ID, BD) in (SELECT ID, max(BD)
FROM Tab
GROUP BY ID);
很难确定哪种解决方案更好,因为这取决于各种特性,主要与索引有关。不过, RANK 通常是一种经过优化的分析函数,用于对结果集中的各个记录进行编号。
如果系统中可能存在有效的未来状态,则需要添加一个条件,将处理限制在历史和当前状态:
超级会员免费看
订阅专栏 解锁全文
171万+

被折叠的 条评论
为什么被折叠?



