2012-02-20 24 views
1

我有一個表,每28天記錄一個模式中的所有表的記錄計數。該表具有下述列: 「TABLE_NAME」 VARCHAR2(100 BYTE), 「RECORD_COUNT」 NUMBER, 「創建」日期選擇28天之間的記錄計數差異

我想卷軸出來,其具有以下數據的日誌文件:

  1. 表名
  2. 當前記錄數
  3. 記錄計數28天前
  4. 差異between2和3

感謝您的幫助。

回答

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

啊,是的,我忘了按表名分區。好答案。 – 2012-02-20 23:52:49

+0

賈斯汀我得到一個錯誤:ORA-00923:FROM關鍵字未找到預期 00923. 00000 - 「FROM關鍵字未找到預期」 *原因: *動作: 行錯誤:28列:1 – Ram 2012-02-21 00:54:16

+0

我做一些小的編輯和現在的工作。 SELECT TABLE_NAME, record_count, prior_record_count, record_count - prior_record_count DIFF FROM(SELECT TABLE_NAME, record_count, 滯後(record_count)以上(分區由TABLE_NAME爲了通過創建)prior_record_count, 秩()以上(分區由TABLE_NAME爲了通過創建)rnk FROM TABLE1) WHERE rnk = 2 – Ram 2012-02-21 01:00:34

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 2012-02-21 00:31:06