Как управлять датой срока действия в базе данных MS Access - PullRequest
0 голосов
/ 07 мая 2020

Мне нужна ваша помощь для запроса в MS Access.

У меня есть две таблицы:

  • одна называется Tblvalrules с кодом отдела, датой действия правил и правилом для применения на эту дату начала. Это означает, что на Dep01 от 01.01.2018 должно применяться правило 1 и всегда на Dep01 с 01.01.2020 будет применяться правило 2.
  • другая таблица с именем TblMovement с датами и зависимостью.

Мне нужен запрос, который добавляет столбец Ruletoapply , который на основе dep и даты TblMovement ищет в Tblvalrules и добавляет правильное правило для применения

Здесь ниже примеры таблиц для лучшего понимания

Tblvalrules

Dep    |  ValidityDateFrom | Rule  | 
------------------------------------
Dep001 |   1/1/2018        | rule1 | 
Dep001 |   1/1/2020        | rule2 | 
Dep002 |   1/1/2016        | rule3 | 
Dep003 |   1/1/2018        | rule4 | 
Dep003 |   1/1/2020        | rule5 |

TblMovement

Date       | Dep    | **Ruletoapply**
------------------------------------
02/01/2018 | Dep001 | **rule1**
02/01/2019 | Dep003 | **rule4**
06/06/2020 | Dep003 | **rule5**

Также заранее спасибо если у вас есть совет по проектированию базы данных

1 Ответ

0 голосов
/ 07 мая 2020

Сначала объедините таблицы и выполните агрегирование, чтобы найти ValidityDateFrom для каждой строки TblMovement, а затем присоедините результат к Tblvalrules, чтобы получить правильные Rule:

select t.Date, t.Dep, r.Rule as Ruletoapply
from (
  select m.Date, m.Dep, max(v.ValidityDateFrom) as ValidityDateFrom
  from TblMovement as m left join Tblvalrules v 
  on v.Dep = m.Dep and v.ValidityDateFrom <= m.Date 
  group by m.Date, m.Dep
) as t inner join Tblvalrules as r 
on r.ValidityDateFrom = t.ValidityDateFrom and r.Dep = t.Dep

Результаты:

Date        Dep     Ruletoapply
2/1/2018    Dep001  rule 1
2/1/2019    Dep003  rule 4
6/6/2020    Dep003  rule 5
...