2012-02-20 3 views
1

28 일마다 스키마의 모든 테이블 레코드 수를 기록하는 테이블이 있습니다. 표는 다음과 같은 열이 있습니다 "TABLE_NAME"VARCHAR2 (100 BYTE), "RECORD_COUNT"번호, "CREATED"날짜를28 일 사이에 레코드 수가 차이가 있음

나는 다음과 같은 데이터가있는 로그 파일 밖으로 스풀 싶습니다 :

을 테이블 이름은
  • 현재 레코드 이십팔일 전에
  • 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을 예상 한 위치에 FROM 키워드를 찾을 수 없습니다 - "예상 위치를 찾을 수 없습니다 FROM 키워드" 는 * 원인 : 은 * 작업 : 라인에서 오류 : 28 열 : 1 – Ram

    +0

    내가 만든 약간의 사소한 수정과 그 작업. SELECT TABLE_NAME, record_count, prior_record_count, record_count - TABLE_NAME 순서에 의해 prior_record_count DIFF 생성) prior_record_count에 의해 TABLE_NAME 순서에 의해 (파티션 이상 (SELECT TABLE_NAME, record_count, 지연 (record_count)에서 순위() 파티션 (이상으로 만든) rnk FROM TABLE1) 어디 rnk = 2 – Ram

    1

    오라클의 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

    관련 문제