CREATE temp TABLE players
(
id smallint,
player_id smallint,
team varchar(20),
start_dt date,
end_dt date
);
insert into players (id, player_id, team, start_dt, end_dt) values
(1,100,'TEAM-A','2018-01-01','2018-08-15'),
(2,100,'TEAM-B','2018-11-15',NULL),
(3,101,'TEAM-B','2018-05-15','2019-02-15'),
(4,101,'TEAM-C','2019-04-01','2019-09-15'),
(5,101,'TEAM-A','2019-11-01',NULL),
(6,102,'TEAM-B','2018-01-15','2019-02-15'),
(7,102,'TEAM-C','2019-05-15','2019-08-01'),
(8,102,'TEAM-A','2019-09-01', NULL ),
(9,103,'TEAM-C','2019-01-01','2019-06-15')
;
从上面的示例输入数据中,我需要找到如下重叠信息-
我尝试使用重叠选项来实现这一点,但它没有给我预期的结果。任何意见都非常感谢。
1条答案
按热度按时间hs1ihplo1#
您正在寻找在给定时间点确实属于同一球队的成对球员。
您可以使用适当的日期重叠条件自联接表,并使用
least()
以及greatest()
计算重叠范围。我通常倾向于避免
overlaps
,因为不等式条件可以更细粒度地控制边界是包含的还是独占的。但如果你想用它,那么:db fiddle上的演示-两个查询都产生: