【问题标题】:SELECT difference in record count between 28 daysSELECT 28 天之间的记录数差异
【发布时间】:2012-03-11 07:31:57
【问题描述】:

我有一个表,它每 28 天记录一次模式中所有表的记录计数。该表具有以下列: "TABLE_NAME" VARCHAR2(100 字节), “RECORD_COUNT”个, “创建”日期

我想提取一个包含以下数据的日志文件:

  1. 表名
  2. 当前记录数
  3. 28 天前的记录计数
  4. 2 和 3 的区别

感谢您的帮助。

【问题讨论】:

    标签: oracle


    【解决方案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
    );
    

    【讨论】:

    • Danimal,结果中还显示了一条空记录。我的表有:Record1-Table1,580,23-JAN-12,Record2-Table1,580,20-FEB-12。您的查询返回: Record1-Table1,580,(null),(null) Record2-Table1,580,580,0
    【解决方案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
    

    【讨论】:

    • 啊,是的,我忘了按表名分区。很好的答案。
    • 贾斯汀我得到一个错误:ORA-00923:在预期的地方找不到 FROM 关键字 00923。00000 -“在预期的地方找不到 FROM 关键字” *原因:*操作:第 28 行错误:第 1 列
    • 我做了一些小的修改,现在可以使用了。 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 TABLE1) WHERE rnk = 2
    • @Ram - 很抱歉,我在子查询中遗漏了一个逗号。更新了我的答案。
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2023-04-09
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多