ВЫБЕРИТЕ разницу в количестве записей между 28 днями - PullRequest
1 голос
/ 21 февраля 2012

У меня есть таблица, которая регистрирует количество записей всех таблиц в схеме каждые 28 дней.В таблице есть следующие столбцы: «TABLE_NAME» VARCHAR2 (100 BYTE), «RECORD_COUNT» NUMBER, «CREATED» DATE

Я хотел бы выделить файл журнала, который имеет следующие данные:

  1. Имя таблицы
  2. Количество текущих записей
  3. Количество записей 28 дней назад
  4. Разница между 2 и 3

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Что-то вроде этого должно сделать

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
1 голос
/ 21 февраля 2012

Функция 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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...