1

簡単なクエリがあります:

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 日前に取得していたこの情報をタイム フェーズに追加できますか?

4

2 に答える 2

3

いいえ。履歴情報を保存する場合は、それをスキーマに組み込む必要があります。たとえば、拡張して列と;Feature_Group_Xrefを追加できます。どのグループが現在特定の機能を持っているかを調べるには(または、列を定義する方法に応じて) と書きますが、特定の時間に特定の機能を持っていたグループを見つけるには、(または) と書きます。Effective_Start_TimestampEffective_End_TimestampAND Effective_End_Timestamp > CURRENT_TIMESTAMP()AND Effective_End_Timestamp IS NULLAND ... BETWEEN Effective_Start_Timestamp AND Effective_End_TimestampAND Effective_Start_Timestamp < ... AND (Effective_End_Timestamp > ... OR Effective_End_Timestamp IS NULL)

ウィキペディアには、人々がこの種の問題に取り組むために使用するさまざまなスキーマ設計に関する優れた記事があります

于 2012-09-12T19:46:14.897 に答える
1

場合によります...

少なくとも理論的には、フラッシュバック クエリを使用できる可能性があります。

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'

ただし、これには、フラッシュバック クエリを実行するために必要な権限があり、UNDO2 日前の午前 0 時の状態にテーブルを戻すことができるように Oracle が申請するのに十分な権限があることが必要です。通常は可能ですが、データベースがそれほど保持するように構成されている可能性は低いですUNDOこのクエリは、たまたまOracle Total Recallを使用している場合にも機能します。

ただし、多くの場合、スキーマ定義を変更して、ある時点で照会できる履歴情報を保存する必要があります。これを実現するにはさまざまな方法があります。@ruakh が提案するように、テーブルに発効日と有効期限の列を追加することは、最も一般的なオプションの 1 つです。特定のケースに適したオプションは、保持する履歴の量、データの変更頻度など、さまざまな要因によって異なります。

于 2012-09-12T19:53:38.757 に答える