Таблица JOIN с max (date), где date меньше, чем другое значение end_date таблицы - PullRequest
0 голосов
/ 03 мая 2019

У меня Oracle sql запрос в ansi-89.Я пытался переписать его в код с помощью JOINS.

SELECT * FROM (SELECT *
FROM A
JOIN B ON A.b_id = B.id
JOIN (SELECT class_id, group_id, name, eff_date, 
      max(eff_date) OVER(PARTITION BY class_id, group_id) max_date FROM C) T
      on T.class_id= A.class_id AND T.group_id= A.group_id)
WHERE eff_date = max_date;

В этом случае я получаю записи с таблицей max(eff_date) в C, но мне нужно ограничить значение C.eff_date значением B.end_date изB стол.

Я хотел присоединиться ко всем записям из C на C.eff_date < B.end_date, и они будут в подзапросе, а затем таким же образом выбрать max (дату) с оператором group by или OVER (...).Разве это не будет эффективным?У меня есть еще 3 таблицы, такие как таблица C для JOIN с тем же условием на значение даты не больше, чем B.end_date.Как я могу сделать это правильно?

SELECT * FROM (SELECT A.*, B.end_date, C.name, C.eff_Date,
max(C.eff_date) OVER (PARTITION BY C.class_id, C.group_id) max_date
FROM A
JOIN B ON A.b_id = B.id
JOIN C on C.class_id = A.class_id AND C.group_id= A.group_id AND C.eff_date <= B.end_date) T
WHERE T.eff_date= T.max_date

РЕДАКТИРОВАТЬ: Ссылка на sqlfiddle

Table A
ID  B_ID    CLASS_ID    GROUP_ID
1   1        AA            BB
2   2        AA            CC


Table B
ID  SOME_VAL    END_DATE
1   value1     03-MAY-19
2   value2     05-MAY-19

Table C
CLASS_ID    GROUP_ID    NAME    EFF_DATE
AA            BB       name1    01-MAY-19
AA            BB       name2    02-MAY-19
AA            BB       name3    03-MAY-19
AA            BB       name4    04-MAY-19
AA            CC       name1    01-MAY-19
AA            CC       name2    02-MAY-19
AA            CC       name3    03-MAY-19
AA            CC       name4    04-MAY-19

После объединения я хочу получить:

A.ID    A.CLASS_ID  A.GROUP_ID B.END_DATE    NAME   EFF_DATE
1           AA          BB     03-MAY-19    name3   03-MAY-19
2           AA          CC     05-MAY-19    name4   04-MAY-19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...