【问题标题】:SQL select specific column which are present for all date rangeSQL选择所有日期范围都存在的特定列
【发布时间】: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 查询来达到相同的结果?

【问题讨论】:

    标签: python mysql sql sql-server oracle


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多