【问题标题】:Rolling 7 Day Count Distinct in postgresql在 postgresql 中滚动 7 天计数不同
【发布时间】:2018-01-25 05:00:56
【问题描述】:

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

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

16 年 1 月 7 日:

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 次,每个日期一次,有没有办法在一个查询中执行此操作?

【问题讨论】:

    标签: sql postgresql


    【解决方案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';
    

    【讨论】:

    • 你太棒了!唯一奇怪的是 generate_series 函数生成的日期回来显示很奇怪。例如:2017-07-18 20:00:00 是日期“2017-07-19”显示的内容。它查询正确,并且给出了正确的答案,但格式在 4 小时后出现。有办法调整吗?
    • 这是因为服务器在格林威治标准时间,但我将结果拉回到我在 EDT 中的笔记本电脑上。问题解决了!再次感谢您的帮助戈登!
    • @Mark 。 . .您可以从g.dte 中增加或减少 4 小时。
    猜你喜欢
    • 2016-03-13
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2021-08-20
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多