题58:
根据下面两个表请查出,所有没有广告出现过的剧集。如果观众观看了剧集,并且剧集里出现了广告,就一定会有观众观看广告的记录。
其中:
- Playback表:session_id (剧集id)是主键,customer_id 是观看该剧集的观众id,集播放时间包含start_time(开始时间) 及 end_time(结束时间),可以保证的是,start_time(开始时间)<= end_time(结束时间),一个观众观看的两个剧集的时间不会出现重叠。
- Ads表:ad_id(广告id)是主键,customer_id 为 观看广告的用户id,timestamp 表示广告出现的时间点。
解题思路:
(1)先找出现在剧集中的广告的session_id,where p.start_time <= a.timestamp and a.timestamp <= p.end_time
(2)然后在父查询中用where去除全部剧集里出现过广告的。
select session_id
from Playback
where session_id not in (
select DISTINCT p.session_id
from Playback p
left join Ads a ON p.customer_id = a.customer_id
where p.start_time <= a.timestamp and a.timestamp <= p.end_time);