时间点与持续时间建模:原理、应用与挑战
1. 获取当前状态
在处理无持续时间和有效性上限,且下一状态会终止其直接前一状态的情况时,准确识别和获取当前有效状态至关重要。可以通过将各个状态分类到由对象形成的分区组中来实现这一目标。
1.1 使用RANK函数获取当前状态
为了获取每个对象的当前状态,可以使用 RANK 分析函数为每个对象的结果集服务。以下是具体的SQL查询示例:
SELECT ID, BD, DATA
FROM
(SELECT tab.*,
RANK() over(PARTITION BY ID ORDER BY BD desc)
as rank
FROM Tab
)
WHERE rank=1;
此查询会为每个对象( ID )生成最新的数据版本。
1.2 使用聚合函数获取当前状态
也可以使用聚合函数来实现相同的目的,示例代码如下:
SELECT *
FROM Tab
WHERE (ID, BD) in (SELECT ID, max(BD)
FROM Tab
GROUP BY ID);
难以确定哪种解决方案更好,这取决于多种特性,主要与索引有关。不过, RANK
超级会员免费看
订阅专栏 解锁全文
171万+

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



