Алгоритм "Выбор актуальных"

В хранилищах данных для таблиц содержащих историю (историческая таблица) используется две даты
EFF_DTTM (VALID_FROM_DTTM) - дата начала действия записи
EXP_DTTM (VALID_TO_DTTM) - дата окончания действия записи, для последней записи в истории равна максимальной дате которая задана константой, например MAX_DATE='31.12.2999'

Обычно EFF_DTTM является включительной в интервал действия, а EXP_DTTM не включительной в интервал действия.

Для выборки из исторических таблиц есть способа

1. Выбор актуальной записи (т.е. где EXP_DTTM=MAX_DATE)

2. Выбор записей действующих в заданный интервал

Реализация алгоритма на Oracle:
WITH 
  hist_table AS (SELECT 1 AS key, 1 val, DATE '2010-01-01' AS eff_dttm, DATE '2011-01-01' AS exp_dttm FROM dual UNION
                 SELECT 1 AS key, 2 val, DATE '2011-01-01' AS eff_dttm, DATE '2012-01-01' AS exp_dttm FROM dual UNION
                 SELECT 1 AS key, 3 val, DATE '2012-01-01' AS eff_dttm, DATE '2015-01-01' AS exp_dttm FROM dual UNION
                 SELECT 2 AS key, 4 val, DATE '2012-01-01' AS eff_dttm, DATE '2012-01-01' AS exp_dttm FROM dual)
SELECT 
  key, 
  val, 
  eff_dttm, 
  exp_dttm
FROM
  hist_table 
WHERE
  exp_dttm > DATE '2014-01-01' --дата начала периода
  AND eff_dttm < DATE '2015-01-01'  --дата конца периода

В результате получим:
   KEYVALEFF_DTTMEXP_DTTM
11301.01.201201.01.2015

Комментарии