Oracle历史报告-在某个时间点发生了什么冲突

Oracle历史报告-在某个时间点发生了什么冲突,oracle,reporting,temporal,Oracle,Reporting,Temporal,我被要求在固定时间点(2019年1月1日)运行我们资产状态的报告 该数据库的编写方式是,资产有自己的带有当前信息的表,然后对于不同的数据位,也有该信息变化的历史记录,每个数据位存储在自己的“历史记录”表中,表中有开始和结束日期。例如,其中一个信息位是资产类别-资产表将有一个包含当前资产类别的字段,如果该类别在过去发生了更改,那么资产历史表中将有带开始和结束日期的行。类似于 AssetID AssetClass StartDate EndDate ------- ---------- ------

我被要求在固定时间点(2019年1月1日)运行我们资产状态的报告

该数据库的编写方式是,资产有自己的带有当前信息的表,然后对于不同的数据位,也有该信息变化的历史记录,每个数据位存储在自己的“历史记录”表中,表中有开始和结束日期。例如,其中一个信息位是资产类别-资产表将有一个包含当前资产类别的字段,如果该类别在过去发生了更改,那么资产历史表中将有带开始和结束日期的行。类似于

AssetID AssetClass StartDate EndDate
------- ---------- --------- -------
      1          1 12-12-87  23-04-90
      1          5 23-04-90  01-02-00
      1          2 01-02-00  27-01-19
      1          1 27-01-19
因此,该资产已经更改了几次类别,但我需要写一些东西,以便能够检查每项资产,并计算出截至1月1日的活动类别。对于本例,这将是上一行的第二个类别,因为它在2000年更改为类别2,然后在2019年1月1日之后成为类别1

为了使它更复杂,我需要一些数据,但如果我能知道如何正确处理,我很乐意将其转换为其他数据


任何指点都将不胜感激

我通常这样写

select assetClass
from history_table h
 where :point_in_time >= startDate
   and (:point_in_time < endDate
        or endDate is null)

所以需要一个where子句来查找开始日期和结束日期之间的日期,或者,如果结束日期为空,且所讨论的日期大于开始日期,则assetclass也可以设置在开始日期之前,因此这将小于,因此您希望第一行的资产类别与1987年12月12日之前的所有日期匹配?抱歉,我显然不清楚。我被要求了解截至1月1日的资产类别。因此,我需要编写一些东西来检查所有assetclass更改,并返回assetclass从未更改的行(那么startdate是什么呢?您是否尝试过kfinity的初始查询?如果是,那么该查询如何不能回答您的问题?谢谢,如果startdate早于时间点,那就行不通了,是吗?如果资产类别在2018年12月1日更改,然后在1月19日结束时再次更改。哦,您的意思是如果时间点早于e开始日期。不,我想这是开始日期的要点。但是我会编辑我的答案,为它添加一个选项。嗨。开始日期可能会出现多次,因为本质上资产类可能会更改多次,但我被要求找出资产类在某个特定时间是什么。基本上我需要写一些检查所有assetclass更改并返回其中任何一个assetclass从未更改的行(因此startdate将为hi)。感谢您的帮助,我认为它不会工作,但它确实工作了。
select assetClass
from history_table h
 where (:point_in_time < endDate
        or endDate is null)
order by startDate asc
fetch first 1 row only