SQL Count даты в одной таблице, которые происходят между начальной и конечной датой в другой таблице - PullRequest
0 голосов
/ 20 марта 2019

У меня есть таблица ' tb1 ', которая выглядит следующим образом:

Nurse    Start          End        Posting 
---    ------------   -----------  -------
123    2012-04-26     2014-02-10   ABC
123    2015-03-21     2016-01-12   DEF
123    2016-05-19     2018-09-14   MNO
256    2017-01-15     2018-02-20   JKL
256    2018-07-13     2019-01-17   MNO

И еще одна отдельная таблица ' tb2 ', которая может быть связана с приведенным выше.таблица в столбце Медсестра .

Nurse    PartyDate 
---    ------------  
123    2017-02-23     
123    2017-05-11     
256    2018-11-28

Я хочу подсчитать количество вечеринок, которые каждая медсестра посещает между датой начала и окончания каждой публикации.Ожидаемый результат должен выглядеть следующим образом:

Nurse    Start          End        Posting   Count
---    ------------   -----------  -------   ------
123    2012-04-26     2014-02-10    ABC        0
123    2015-03-21     2016-01-12    DEF        0
123    2016-05-19     2018-09-14    MNO        2
256    2017-01-15     2018-02-20    JKL        0
256    2018-07-13     2019-01-17    MNO        1

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Один метод является коррелированным подзапросом:

select t1.*,
       (select count(*)
        from tb2 t2
        where t2.nurse = t1.nurse and
              t2.partydate >= t1.start and
              t2.partydate <= t1.end
       ) as num_parties
from tb1 t1;

Для производительности вам нужен индекс на tb2(nurse, start, end).

0 голосов
/ 20 марта 2019

Вот еще один способ добиться этого.

select tb1.nurse, tb1.start, tb1.end, tb1.posting, count(tb2.partydate) Count
from tb1 left join tb2 on (tb1.nurse = tb2.nurse 
                           and tb2.partyDate between tb1.start and tb1.end)
group by tb1.nurse, tb1.start, tb1.end, tb1.posting 
;

Ожидается, что он будет выполняться быстрее, чем коррелированные запросы, поскольку в случае последних для каждой записи из базы данных tb1 ядру БД придется сканировать таблицу tb2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...