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