2012-02-20 7 views
1

28日ごとにスキーマ内のすべてのテーブルのレコード数を記録するテーブルがあります。レコード数の差が28日以内

:テーブルには、次のカラムがあります。私は、以下のデータを持っているログファイルをスプールアウトしたいDATE

"を作成した" "TABLE_NAME" VARCHAR2(100 BYTE)、 "RECORD_COUNT" NUMBER、 テーブル名が

  • 現在のレコード28daysの前
  • between2違いと3
  • をカウント
  • のレコードをカウント
    1. ご協力いただきありがとうございます。

  • 答えて

    2

    をこのような何かがそれを

    SELECT table_name, 
         record_count, 
         prior_record_count, 
         record_count - prior_record_count diff 
        FROM (SELECT table_name, 
           record_count, 
           lag(record_count) 
            over (partition by table_name 
              order by created) prior_record_count, 
           rank() 
           over (partition by table_name 
              order by created) rnk 
          FROM <<name of table>>) 
    WHERE rnk = 1 
    
    +0

    はい、私はテーブル名でパーティションを忘れました。いい答えだ。 –

    +0

    ジャスティンは私がエラーを取得:ORA-00923を: 00923. 00000を期待どこキーワードは見つかりません - *原因「キーワードから期待されるが見つかりません」: *アクション:ラインで エラー:28カラム:1 – Ram

    +0

    私が作ったのいくつかのマイナーな編集とその作業SELECT TABLE_NAME、 RECORD_COUNT、 prior_record_count、 RECORD_COUNT - table_nameの順序によってprior_record_count差分 作成)prior_record_countによってTABLE_NAMEの順序によって(パーティションオーバー(SELECT TABLE_NAME、 RECORD_COUNT、 ラグ(RECORD_COUNT)FROM、 ランク()パーティション(オーバーにより、作成した)rnk FROM TABLE1) WHERE rnk = 2 – Ram

    1

    OracleのLAG関数は、必要なものを提供します。前の行のデータを返す分析関数です。以下の作業をする必要があります:

    select 
        table_name, 
        record_count, 
        prev_record_count, 
        record_count - nvl(previous_record_count, 0) as difference 
    from (
        select 
         table_name, 
         record_count, 
         lag(record_count) over (order by created) as prev_record_count 
        from 
         log_table 
    ); 
    
    +0

    Danimalを行う必要があり、結果に現れてヌルのレコードもあります。私のテーブルには、Record1-Table1,580,23-JAN-12、Record2-Table1,580,20-FEB-12があります。あなたのクエリが返されます:Record1-Table1,580、(null)、(null)\t \t Record2-Table1,580,580,0 – Ram

    関連する問題