在postgresql

时间:2017-08-16 22:27:37

标签: sql postgresql

我有一个有两列的表:
日期:所有日期从1/1 / 16-12 / 31/16
ID:作为文本字段的唯一标识符。特定ID可能会在多天内发生,也可能不会发生。

我想计算每天不同ID的滚动7天计数。这是一天做SQL的SQL:

1/7/16:

Select '2017-01-07' as week_end_date, count(distinct(id)) as ids
from table
where date between '2016-01-01' and '2016-01-07' 

不是每次运行上述查询365次,每个日期一次,是否有办法在一个查询中执行此操作?

1 个答案:

答案 0 :(得分:1)

计算不同的ID很棘手。如果性能不是问题,您可以这样做:

Select week_start_date + interval '6 day' as week_end_date,
       count(distinct id) as ids
from table join
     generate_series('2016-01-01'::date, '2017-01-01'::date, interval '1 day') as g(week_start_date) 
where date between week_start_date and week_start_date + interval '6 day';