2016-05-11 15 views
-1

誰かがSELECTステートメントを作成してテーブルからデータをフェッチする方法はありますか?のは、私が持っているとしましょう:列dは、電子、は昨日から更新されたfが、私は私のselect文で、この行を含めるよりも、のは、言わせた場合フィールドの一部が更新された場合のみSELECTステートメントがテーブルから更新されましたORACLE

select a, b, c, d , e, f 
from table 1 t1 
inner join table2 t2 
on t1.a = t2.a 

私が面白いんだけど、D、Eの場合、fはこの行を無視するより昨日から更新されていません。 table1には、データが挿入された日付フィールド(date_created)と、更新された日付フィールド(date_modified)があります。面倒なことは、table1のデータは、ユーザが日付の間に更新するかもしれないが、義務的なフィールドではないということである。d、e、fは、ユーザに単純に更新されたカラムa、b、cを言う。しかし、date_modifiedカラムは、行が更新されたことを示します。だから、私はdate_modified列に純粋に依存することはできません。私の質問は、データをフィルタリングして正しい行を返す方法は他にありますか?トリガとストアドプロシージャは、理想的に純粋なSQLのオプションはありません..任意のヘルプ?

+0

興味のある列が更新されたときに別の列を追加しない限り、またはすべての列の監査を続けると、求めていることを実行できません。 –

+0

マイケル・マクグリフごめんなさい、それはオラクル関連です。 – USSR

+0

ショーン・ランゲは親切にいくつかの役に立つリンクを提供できますか?最初のものは私が恐れているオプションではなく、恐らく第2のものを試してみる価値があります。その方向に掘り下げる必要があります...ありがとう – USSR

答えて

1

どの列がどの表に属しているのかは明確ではありませんが、フラッシュバック問合せを使用する方法が1つあります(問合せ間の24時間の違いに対応するために十分な取り消し保持がある場合)。

deまたはfは24時間前にその値から変更されているテーブルの上の違いを見つけるの例は次のとおりです。

解決
SELECT t.* 
FROM table_name t 
     INNER JOIN 
     (
     SELECT * 
     FROM table_name 
       AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '1' DAY 
     ) p 
     ON (t.a = p.a 
      AND (t.d <> p.d OR t.e <> p.e OR t.f <> p.f)); 
+0

MTO私自身の答えを書いてしまう前に、あなたの投稿を見ることはできませんでした。明日はそれをテストし、うまくいけば答えが正しいとマークします。ありがとうございました !!! – USSR

0

!解決策:追加の列(合計と言う)を列の合計として、ターゲット表に追加しますd、e、fそして初めて更新します。その後、カラムd、e、fが変更された場合は、カラムd、e、fの合計が合計カラムと異なり、単にwhere句でフィルタリングできます。 おそらく最も洗練された解決策ではないかもしれませんが、それは仕事です。 あなたのアイデアありがとう!

関連する問題