2012-02-20 26 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