Соединить таблицу с максимальным условием на одном поле - PullRequest
0 голосов
/ 09 марта 2020

У меня есть три таблицы Company, CompanyBenefitPeriods и CompanyContractType. Company и CompanyBenefitPeriods имеют отношение один-к-одному, а CompanyBenefitPeriods и CompanyContractType имеют отношение один-ко-многим. Я хочу получить список компаний, каждая из которых имеет последний объект CompanyContractType. подзапрос 'показать. Как я могу изменить вышеуказанный запрос, чтобы получить желаемый результат. Спасибо за ваше время.

Редактировать: Пример данных выглядит следующим образом:

|---------------------|
|      CompanyNo      |
|---------------------|
|          1          |
|---------------------|

|---------------------|------------------|
|   CompanyBenefitNo  |     CompanyNo    |
|---------------------|------------------|
|          1          |          1       |
|          2          |          2       |
|                     |                  |

|---------------------|------------------|------------------|------------------|
|   CompanyContractNo | CompanyBenefitNo |    CompanyNo     |    CreatedOn     |
|---------------------|------------------|------------------|------------------|
|          1          |          1       |          1       |   '27-10-2019'   |
|          2          |          1       |          1       |   '27-11-2019'   |
|          3          |          2       |          2       |   '27-12-2019'   |
|          4          |          2       |          2       |   '27-01-2020'   |

The desire result: 
|---------------------|------------------|------------------|------------------|
|      CompanyNo      | CompanyBenefitNo | CompanyContractNo|    CreatedOn     |
|---------------------|------------------|------------------|------------------|
|          1          |          1       |          2       |   '27-11-2019'   |
|          2          |          2       |          4       |   '27-01-2020'   |

Надеюсь, что это может помочь.

1 Ответ

0 голосов
/ 09 марта 2020

Использовать оконные функции. Сложно следовать вашему запросу. Я думаю, что вы хотите:

SELECT . . . 
FROM Company c LEFT JOIN
     (SELECT cpb.*, . . .
             ROW_NUMBER() OVER (PATITION BY c.companyNo ORDER BY cct.createdOn) as seqnum
      FROM companyBenefitPeriods cbp JOIN
           ccompanyContractType cct 
           ON cct.companyBenefitPeriodNo = cbp.companyBenefitPeriodNo
     ) cpb
     ON cbp.companyNo = c.companyNo AND seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...