sql - 累积不重复计数
问题描述
我无法获得累积的不同计数,所以让我们假设以下数据集。
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.
希望这是有道理的,请记住,如果这会改变事情,这是一个非常大的数据集。
解决方案
您可以对每个的最早日期进行累积计数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;
推荐阅读
- python - 设计一个 should_throttle 函数,限制基于特定时间窗口内的请求
- c# - DataGridTextColumn Header 的绑定不起作用
- java - Spring Reactor:Optional 对应的类是什么
? - c# - 在 RaiseAndSetIfChanged 中吞下异常
- javascript - 如何对动态创建的输入字段中的值求和
- simulator - Ns3 getdeconds() 问题。使用此函数获取时间延迟但失败
- xml - Xpath current() in Yang
- c++ - 安全地引用具有与模板不兼容的模板参数的 C++ 模板类型?
- html - 将表单添加到 html 表格单元格
- dolphindb - 如何从 DolphinDB 数据库 SQL 查询中的小表中提取信息