计数日期范围内的不同,运行 grass_date

Count distinct in a date range, running grass_date

我有一个 table 这样的:

日期 名字
1/1 一个
1/2 b
1/3 c
1/2 一个
1/3 d

并且需要计算每行中日期后 7 天内可用的不同名称。 结果应该是:

日期 计数 解释
1/1 1 一个
1/2 2 a,b
1/3 4 a,b,c,d

我试过这些 count+if、count+case when、滞后函数:

没有任何效果,结果是只计算每天的名字。

请指教,万分感谢!

嗯。 . .这是否符合您的要求?

select min_date, 
       sum(count(*)) over (order by date) as cnt,
       array_agg(array_agg(name)) over (order by date) as names
from (select name, min(date) as min_date
      from t
      group by name
     ) t
group by min_date;

编辑:

假设每个日期一行,添加一个 window 框架规范:

select min_date, 
       sum(count(*)) over (order by date rows between 6 preceding and current row) as cnt,
       array_agg(array_agg(name)) over (order by date rows between 6 preceding and current row) as names
from (select name, min(date) as min_date
      from t
      group by name
     ) t
group by min_date