SQL选择所有日期范围都存在的特定列

Posted

技术标签:

【中文标题】SQL选择所有日期范围都存在的特定列【英文标题】:SQL select specific column which are present for all date range 【发布时间】:2020-06-26 13:48:38 【问题描述】:

我应该如何编写 SQL 查询来查找存在于所有日期范围内的列的所有唯一值。

+-------------+--------+------------+
| primary_key | column |    date    |
+-------------+--------+------------+
|           1 | a      | 2020-03-01 |
|           2 | a      | 2020-03-02 |
|           3 | a      | 2020-03-03 |
|           4 | a      | 2020-03-04 |
|           5 | b      | 2020-03-01 |
|           6 | b      | 2020-03-02 |
|           7 | b      | 2020-03-03 |
|           8 | b      | 2020-03-04 |
|           9 | c      | 2020-03-01 |
|          10 | c      | 2020-03-02 |
|          11 | c      | 2020-03-03 |
|          12 | d      | 2020-03-04 |
+-------------+--------+------------+

在上面的例子中,如果查询日期范围是 2020-03-01 到 2020-03-04 输出应该是

a
b

因为该范围内只有 a 和 b 同样,如果查询日期范围是 2020-03-01 到 2020-03-03 输出应该是

a
b
c

我可以在 python 脚本中通过获取所有行并使用集合来执行此操作。 是否可以编写一个 SQL 查询来达到相同的结果?

【问题讨论】:

【参考方案1】:

解决上述问题的另一种方法。

select data from (
select data,count(data) as datacnt from unique_value group by data ) a,
(select count(distinct present_date ) as cnt  from unique_value) b
where a.datacnt=b.cnt;

【讨论】:

【参考方案2】:

您可以按column 值聚合,然后断言不同的日期计数:

SELECT col
FROM yourTable
WHERE date BETWEEN '2020-03-01' AND '2020-03-04'
GROUP BY col
HAVING COUNT(DISTINCT date) = 4;

【讨论】:

以上是关于SQL选择所有日期范围都存在的特定列的主要内容,如果未能解决你的问题,请参考以下文章

日期范围查询的 SQL 索引

SQL:如何显示给定范围内的所有日期?

尽量不在 SQL 查询中硬编码日期范围(Python、SQL 服务器)

在日期范围和特定时间范围之间进行选择

SQL 如何查询日期在一定范围内的数据

同一张表中的 SQL DATE 比较