首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >甲骨文历史报告-在某一时间点的行是什么?

甲骨文历史报告-在某一时间点的行是什么?
EN

Stack Overflow用户
提问于 2019-02-19 16:14:45
回答 1查看 37关注 0票数 0

我被要求在一个固定的时间点(2019年1月1日)报告我们的资产状况。

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

代码语言:javascript
复制
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年的第二类,然后在2019年1月1日之后,它变成了第一类。

为了使它变得更复杂,我需要对几个数据进行处理,但是如果我能够正确地理解如何做到这一点,那么我很乐意将它转换成其他数据。

任何指点都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 16:53:19

我通常这样写

代码语言:javascript
复制
select assetClass
from history_table h
 where :point_in_time >= startDate
   and (:point_in_time < endDate
        or endDate is null)

(假设这些列实际上是date类型,而不是varchar2)

between看起来总是很诱人,但是它包含两个端点,所以您必须编写类似于:point_in_time between startDate and (endDate - interval '1' second)的东西

编辑:如果您尝试在第一个point_in_time之前使用start_date运行此查询,则不会得到任何结果。这对我来说似乎很正常,但也许你想选择“第一个尚未过期的结果”,如下所示:

代码语言:javascript
复制
select assetClass
from history_table h
 where (:point_in_time < endDate
        or endDate is null)
order by startDate asc
fetch first 1 row only
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54770614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档