我有一个表“ 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
答案 0 :(得分:2)
一种方法是相关子查询:
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)
上建立索引。
答案 1 :(得分:0)
这是实现这一目标的另一种方式。
buildscript {
configurations {
all*.exclude group: 'com.google.firebase', module: 'firebase-core'
all*.exclude group: 'com.google.firebase', module: 'firebase-iid'
}
repositories {
...
}
dependencies {
...
}
}
预计它会比相关查询运行得更快,因为对于后者,来自tb1数据库引擎的每个记录都必须扫描tb2表