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

У меня есть две таблицы в базе данных MariaDB, используемые для моей диссертации, одна с годами финансовой компании и одна с данными патента. Таблица патентных данных (таблица A) выглядит следующим образом:

    Company | Publication_number | Application_Date | Document_Type | Country_Code | ...
    A       | US2019xxxx         | 2018-12-01       | application   | US           | ...
    A       | WO2018xxxx         | 2018-12-01       | application   | WO           | ...
    A       | US2018xxxx         | 2017-09-23       | application   | WO           | ...
    B       | EP3285xxxx         | 2018-09-23       | patent        | EP           | ...
    B       | US2019xxxx         | 2019-01-27       | patent        | EP           | ...
    ...

Таблица финансовых лет (таблица B) выглядит следующим образом:

    Company | Financial_Year | Financial_Year_Start | Financial_Year_End
    A       | 2018           | 2018-01-01           | 2018-12-31
    A       | 2017           | 2017-01-01           | 2017-12-31
    B       | 2018           | 2018-04-01           | 2019-03-31
    ...

Я хотел бы иметь таблицу ( Таблица C) вроде:

    Company | Publication number | Application Date | Financial Year | Document Type | Country Code | ...
    A       | US2019xxxx         | 2018-12-01       | 2018           | application   | US           | ...
    A       | WO2018xxxx         | 2018-12-01       | 2018           | application   | WO           | ...
    A       | US2016xxxx         | 2017-09-23       | 2017           | application   | WO           | ...
    B       | EP3285xxxx         | 2018-09-23       | 2018           | patent        | EP           | ...
    B       | US2019xxxx         | 2019-01-27       | 2018           | patent        | EP           | ...
    ...

Кажется достаточно простым, но я не нашел способа правильно назначить финансовый год, используя даты начала и окончания. К сожалению, финансовые годы не всегда совпадают с календарными годами. Может кто-нибудь сказать мне, как подойти к этой проблеме? У меня есть сотни тысяч патентных документов в моей таблице, поэтому ручное присвоение финансовых лет не вариант.

Конечная цель - получить производную основную таблицу c statisti c, которая выглядит следующим образом (Таблица D ):

    Company | Financial Year | Count US Applications | Count US patents | Count EP Applications | ...
    A       | 2018           | 89                    | 12               | 56                    | ...
    A       | 2017           | 93                    | 26               | 64                    | ...
    B       | 2018           | 53                    | 5                | 49                    | ...

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Вот демоверсия (в PostgreSQL), но вы можете применить то же самое в MariaDB.

select
    p.Company,
    Publication_number,
    Application_Date,
    Financial_Year,
    Document_Type,
    Country_Code
from patent p
join financial_years fy
on p.Company = fy.Company
and Application_Date between
    Financial_Year_Start and Financial_Year_End

и для вашего конечного результата вы можете сделать что-то подобное с case оператором

select
    Company,
    Financial_Year,
    sum(case when Country_Code = 'US' and Document_Type = 'patent' then 1 else 0 end) as 'Count US patents',
    sum(case when Country_Code = 'US' and Document_Type = 'application' then 1 else 0 end) as 'Count US applications',
    sum(case when Country_Code = 'EP' and Document_Type = 'patent' then 1 else 0 end) as 'Count EP patents',
    sum(case when Country_Code = 'EP' and Document_Type = 'application' then 1 else 0 end) as 'Count RP applications'
from yourTable
group by
    Company,
    Financial_Year
order by
    Financial_Year
1 голос
/ 03 мая 2020

Таблицы связаны между собой компанией и диапазоном дат, поэтому присоединяйтесь к ним. Это должно быть просто:

select *
from a
join b on a.company = b.company
      and a.application_date between b.financial_year_start and b.financial_year_end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...