Алгоритм "Выбор актуальных"
В хранилищах данных для таблиц содержащих историю (историческая таблица) используется две даты
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' --дата конца периода
В результате получим:
KEY | VAL | EFF_DTTM | EXP_DTTM | |
---|---|---|---|---|
1 | 1 | 3 | 01.01.2012 | 01.01.2015 |
Комментарии
Отправить комментарий