[英]Rolling average using date_trunc
我正在使用date_trunc
汇总时间戳字段。 我试图计算一个月内给定字段中唯一值的数量。 如果我选择month
作为解决方案:
SELECT date_trunc('month', timestamp), COUNT(DISTINCT(foo)) FROM ...
那么所有产生的条目都在每个月初,因此“ 2017-01-01”将计算timestamp
字段在1月中任意位置的唯一条目。
有没有一种方法可以指定一个偏移量,以便我可能在2017年1月15日有一个条目,包括直到2017年2月15日的条目?
谢谢。
SELECT
date_trunc('month', timestamp + interval '15 day'),
COUNT(DISTINCT(foo))
FROM ...
group by 1
这种查询永远不会非常有效。 如果速度是一个问题,那么最好通过在应用程序语言中循环在数据库之外执行此操作
在子查询中,对于每条记录,我们都会生成一系列日期,这些日期将其包含在它们的聚合中,然后根据生成的日期进行聚合。
SELECT
mydate
, COUNT(DISTINCT foo)
FROM (SELECT GENERATE_SERIES( DATE("timestamp") - INTERVAL '30 DAYS'
, DATE("timestamp"), '1 DAY') mydate
, foo
FROM mytable) expanded
GROUP BY 1
另外,请尽量不要将timestamp
用作列名作为postgresql数据类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.