sql - SQL选择包含间隔中所有值的行
问题描述
我知道这个问题措辞不好,对不起,我真的无法用语言表达这个问题。这是一个表示:
我有两个表:产品和可用性。一个产品可以有多个可用日期。例子:
Table 1 (products):
id | name | ....
----------------------------------
1 | My product 1 | ....
2 | My product 2 | ....
Table 2 (availability):
id | productId | date
-----------------------------------------
1 | 1 | 2021-01-15
2 | 1 | 2021-01-16
3 | 1 | 2021-01-17
4 | 2 | 2021-01-15
5 | 2 | 2021-01-16
是否有一个 sql 语句,给定一个间隔,允许我们获取一个产品列表,该列表在间隔的每个元素的可用性表中有一行?
例如,给定区间 [2021-01-15 -> 2021-01-17],请求应返回产品 1,因为它在整个期间都可用(每个元素都有一行:第 15、16 和 17) . Product2 未返回,因为它在 2021-01-17 不可用。
有没有办法在 SQL 中做到这一点,还是我必须使用 PL/SQL?
任何帮助表示赞赏,谢谢
解决方案
您可以使用如下分析函数:
select p.* from
(select p.*, count(distinct a.date) over (partition by a.productid) as cnt
from products p
join availability a on a.productid = p.id
where a.date >= date '201-01-15'
and a.date < date '201-01-17' + 1 )
where cnt = date '201-01-17' - date '201-01-15' + 1
推荐阅读
- python - 如何对引发异常的python函数进行pytest
- java - Java protobuf 在根消息和子消息中设置字段
- glsl - 如何修复这个体积光着色器
- macos - 使用 videojs-contrib-hls 覆盖本机 HLS 支持会破坏 Safari 上的流畅播放
- android - 使用 notificationManager.getActiveNotifications() 获取状态栏通知
- python - 如何比较2个不同字符串的子字符串?
- javascript - ASP.NET Core 2.1 SignalR 未定义
- python-3.x - 为什么我的笔记本从其他笔记本读入后不显示图形?
- javascript - 提交功能的Javascript
- asp.net-mvc - 当我移动到日期时间时,滚动变得可见