如何在SQL中使用递归cte或其他方法对不同字段进行累积计数



使用下面的示例,第1天A、B、C将分别有1,3,3个不同的名称。在第2天计算每栋房子的不同名称时,将使用第2天之前的数据。在第3天计算每栋房子的不同名称时,使用第3天之前的数据。

可以使用递归cte吗?

数据:

名字千斤顶Pop[/tr>Anna//tr>露点//tr>Jon[/tr>5月Anna//tr>露点露点
房子
1 A
1 B
1 C
1 C
1 C 佛朗哥
2 A
2 B
2 C
3 A 乔恩
3 B
3 C
3 C

如果不知道数据的需求和大小,就很难给出理想/最佳的解决方案。假设一个小数据集需要一种快速而肮脏的计算方法,只需使用这样的子查询。。。

SELECT p.[Day]
, p.House
, (SELECT COUNT(DISTINCT([Name]))
FROM #Bing
WHERE [Day]<= p.[Day] AND House = p.House) DistinctNames
FROM #Bing p
GROUP BY [Day], House
ORDER BY 1

不需要递归CTE。只需标记第一次在房子里看到名字的时间,并使用累积总和:

select day, house,
sum(sum(case when seqnum = 1 then 1 else 0 end)) over (partition by house order by day) as num_unique_names
from (select t.*,
row_number() over (partition by house, name order by day) as seqnum
from t
) t
group by day, house

相关内容

  • 没有找到相关文章

最新更新