我很难得到一个累积的不同计数,所以让我们假设下面的数据集。
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的distinct时考虑了1/1/18的数据,您将如何编写查询来获得以下结果。
结果如下。
Date Count(*)
1/1/18 3
1/2/18 5 <- 1/1/18 distinct plus + 1/2 distinct.
希望这是有意义的,记住这是一个非常大的数据集,如果这改变了事情。
2条答案
按热度按时间k5ifujac1#
下面的查询可以给出所需的累计非重复计数。
--Step 3: SELECT dt, cum_distinct_cnt FROM ( --Step 2: SELECT rid, dt, COUNT(CASE WHEN row_num = 1 THEN rid END) OVER (ORDER BY dt ROWS BETWEEN Unbounded PRECEDING AND CURRENT ROW) cum_distinct_cnt FROM ( --Step 1: SELECT rid, dt, ROW_NUMBER() OVER (PARTITION BY rid ORDER BY dt) row_num FROM table) innerTab1 ) innerTab2 QUALIFY ROW_NUMBER() OVER (PARTITION BY dt ORDER BY cum_distinct_cnt DESC) = 1
由于您的数据集非常大,您可以按照查询中所述的步骤中断以下查询,并创建工作表来填充innertab1/innertab2以获得最终输出dgsult0t2#
您可以对每个项目的最早日期进行累计计数
rid
:注意:这将是错过的日期,不是一个心意的一些
rid
. 以下是一种获取所有日期的方法,如果这是一个问题: