Соедините две таблицы на основе диапазона дат - PullRequest
0 голосов
/ 03 мая 2020

У меня есть две таблицы в моей базе данных Firebird. Первая таблица называется LEDGER и показывает детали моей транзакции, включая дату транзакции (гггг / мм / дд). Вторая таблица называется PERIODS и состоит из следующих полей:

  • Номер периода (INTEGER)
  • Дата начала периода (гггг / мм / дд)
  • Период дата окончания (гггг / мм / дд)

Я хочу использовать дату согласно таблице LEDGER, чтобы найти соответствующий период в таблице PERIODS и объединить две таблицы на основе этого. Короче говоря, я хочу показать период для каждой строки таблицы ГК, чтобы помочь мне в подготовке консолидированной отчетности.

Приведу пример таблицы PERIODS:

enter image description here

Каков наилучший подход для этого?

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

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Вы можете просто использовать join:

select l.*, p.per
from ledger l left join
     periods p
     on l.date_of_transaction >= p.start_date and
        l.date_of_transaction <= p.end_date
0 голосов
/ 03 мая 2020

Используйте запрос ниже. Пожалуйста, измените имена столбцов, я привел имена столбцов в качестве примера.

select P.PER, L.* from LEDGER L
inner join PERIODS P
on (L.date_of_transaction = P.start_date);



select P.PER, L.* from LEDGER L
inner join PERIODS P
on (L.date_of_transaction between P.start_date);
...