首页 > 解决方案 > 累积不重复计数

问题描述

我无法获得累积的不同计数,所以让我们假设以下数据集。

   DATE       RID  
   1/1/18      1
   1/1/18      2
   1/1/18      3
   1/1/18      3

所以如果我们运行这个查询

 SELECT DATE, COUNT(DISTINCT RID) FROM TABLE;

我们希望它返回 3,但是让我们假设第二天的数据如下。

 DATE    RID
 1/2/18  1
 1/2/18  6
 1/2/18  9

您将如何编写查询以获得以下结果,其中在返回 1/2/18 的不同时考虑 1/1/18 的数据。

所以会是下面的结果。

  Date      Count(*)
  1/1/18      3
  1/2/18      5              <- 1/1/18 distinct plus + 1/2 distinct.

希望这是有道理的,请记住,如果这会改变事情,这是一个非常大的数据集。

标签: sqlhiveteradata

解决方案


您可以对每个的最早日期进行累积计数rid

select mindate, count(*), sum(count(*)) over (order by mindate)
from (select rid, min(date) as mindate
      from t
      group by rid
     ) t
group by mindate
order by mindate;

注意:这将缺少某些不适合某些rid. 如果这是一个问题,这是获取所有日期的一种方法:

select mindate, count(rid), sum(count(rid)) over (order by mindate)
from ((select rid, min(date) as mindate
       from t
       group by rid
      )
      union all
      (select distinct NULL, date
       from t
      )
     ) rd
group by mindate
order by mindate;

推荐阅读