Oracle SQL--我可以给查询加时间戳吗?
我有一个简单的问题:Oracle SQL--我可以给查询加时间戳吗?,sql,oracle,Sql,Oracle,我有一个简单的问题: Select Count(p.Group_ID) From Player_Source P Inner Join Feature_Group_Xref X On P.Group_Id=X.Group_Id where x.feature_name ='Try this site' 它会在当前时刻吐出特定测试组中的当前人数 如果我想看看这个数字是多少,比如说,在2012年9月10日,我可以在查询中添加一些内容
Select Count(p.Group_ID)
From Player_Source P
Inner Join Feature_Group_Xref X On P.Group_Id=X.Group_Id
where x.feature_name ='Try this site'
它会在当前时刻吐出特定测试组中的当前人数
如果我想看看这个数字是多少,比如说,在2012年9月10日,我可以在查询中添加一些内容,以将此信息作为数据库2天前的时间段吗?否。如果您想存储历史信息,您需要将其合并到您的模式中。例如,您可以扩展
Feature\u Group\u Xref
以添加列effect\u Start\u Timestamp
和effect\u End\u Timestamp
;要查找当前哪些组具有给定的功能,您需要编写和Effective\u End\u Timestamp>CURRENT\u Timestamp()
(或者和Effective\u End\u Timestamp为NULL,具体取决于您想如何定义列),但要查找在特定时间具有给定功能的组,您需要编写和。。。在有效开始时间戳和有效结束时间戳之间
(或和有效开始时间戳<…和(有效结束时间戳>…或有效结束时间戳为空)
)
Wikipedia有一篇关于人们用来解决这类问题的各种模式设计的好文章:请参阅。否。如果您想存储历史信息,您需要将其合并到您的模式中。例如,您可以扩展Feature\u Group\u Xref
以添加列effect\u Start\u Timestamp
和effect\u End\u Timestamp
;要查找当前哪些组具有给定的功能,您需要编写和Effective\u End\u Timestamp>CURRENT\u Timestamp()
(或者和Effective\u End\u Timestamp为NULL,具体取决于您想如何定义列),但要查找在特定时间具有给定功能的组,您需要编写和。。。在有效开始时间戳和有效结束时间戳之间
(或和有效开始时间戳<…和(有效结束时间戳>…或有效结束时间戳为空)
)
维基百科有一篇关于人们用来解决这类问题的各种模式设计的好文章:参见。这取决于
至少在理论上,您可以使用flashback查询
Select Count(p.Group_ID)
From Player_Source as of timestamp( date '2012-09-10' ) P
Join Feature_Group_Xref as of timestamp( date '2012-09-10' ) X
On P.Group_Id=X.Group_Id
where x.feature_name ='Try this site'
不过,这需要您具有执行闪回查询所需的特权,并且Oracle有足够的UNDO
来应用,以便能够恢复到两天前午夜这些表所处的状态。数据库不太可能被配置为保留那么多的UNDO
,尽管这通常是可能的。如果您碰巧正在使用,此查询也可以工作
不过,更可能的情况是,您需要修改模式定义,以便存储历史信息,然后在某个时间点进行查询。有多种方法可以实现这一点——按照@ruakh的建议,向表中添加有效日期列和过期日期列是更流行的选项之一。哪些选项适合您的具体情况取决于多种因素,包括您希望保留多少历史记录、数据更改的频率等。这取决于
至少在理论上,您可以使用flashback查询
Select Count(p.Group_ID)
From Player_Source as of timestamp( date '2012-09-10' ) P
Join Feature_Group_Xref as of timestamp( date '2012-09-10' ) X
On P.Group_Id=X.Group_Id
where x.feature_name ='Try this site'
不过,这需要您具有执行闪回查询所需的特权,并且Oracle有足够的UNDO
来应用,以便能够恢复到两天前午夜这些表所处的状态。数据库不太可能被配置为保留那么多的UNDO
,尽管这通常是可能的。如果您碰巧正在使用,此查询也可以工作
不过,更可能的情况是,您需要修改模式定义,以便存储历史信息,然后在某个时间点进行查询。有多种方法可以实现这一点——按照@ruakh的建议,向表中添加有效日期列和过期日期列是更流行的选项之一。哪些选项适用于您的特定情况取决于多种因素,包括您希望保留多少历史记录、数据更改的频率等。您是否在历史记录表中保留以前的更新以供玩家使用?其他选项,但更复杂(DW)您是否在历史记录表中为player_源保留以前的更新?其他选项,但涉及更多(DW)