Как обозначить указанные записи по дате в огромной таблице Oracle - PullRequest
0 голосов
/ 19 октября 2018

У меня огромная таблица, 500 миллионов записей.Я должен разделить эту таблицу на группы (разделы) на основе 4 атрибутов.

В каждой группе я должен выбрать (установить флаг) самую новую запись и последующие записи, если разница в дате большене более 7 дней (выберите самую последнюю запись из 7-дневного периода).

Я думаю, что таблица слишком велика, чтобы делать на ней расчеты.Должен ли я разделить его на несколько меньших?Но все записи одной группы должны находиться в одной и той же таблице.

Есть ли способ обозначить соответствующие записи, используя только SQL (без извлечения их в массивы PL / SQL)?Это разовая операция.

У вас есть идеи, как решить эту проблему?

Пример (одна группа - атрибуты и дата в формате дд-мм-гггг):

  1. [A1 A2 A3 A4] 08-05-2018 (флаг 1 - самый новый)
  2. [A1 A2 A3 A4] 06-05-2018 (флаг 0 - разница менее 7 дней)
  3. [A1 A2 A3 A4] 01-05-2018 (флаг 1 - разница больше / равно 7 дней)
  4. [A1 A2 A3 A4] 30-04-2018 (флаг 0 -разница менее 7 дней - относительно записи 3)
  5. [A1 A2 A3 A4] 10-04-2018 (флаг 1 - разница больше / равна 7 дням - относительно записи 3)

1 Ответ

0 голосов
/ 19 октября 2018

Поскольку вам нужно преобразовать таблицу в раздел, но хранить только записи, у которых разница дат превышает 7 с предыдущей записью, если возможно, я предлагаю вам удалить ненужные записи, если это возможно.

Вы будетенужно сравнить соседние строки, поэтому вы можете использовать функцию lag() или lead().

https://oracle -base.com / Articles / Misc / Lag-Lead-Analytic-functions

Я думаю, что следующий запрос может помочь:

SELECT pk, A1, A2, A3, A4, a_date
  FROM (SELECT PK, A1, A2, A3, A4, a_date,
       LAG (a_date, 1, 0)   OVER (ORDER BY A1, A2, A3, A4, a_date DESC) AS date_prev,
       a_date - LAG (a_date, 1, 0) OVER (ORDER BY A1, A2, A3, A4, a_date DESC) AS date_diff
          FROM tbl1)
 WHERE date_diff < 7

Это записи, которые вы можете удалить.

Затем вы можете создать секционированную таблицу - разделение на основе списка- на основе структуры вашей таблицы, а затем вставьте в select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...