我正在使用date_trunc
在时间戳字段上进行汇总。我试图计算一个月内给定字段中唯一值的数量。如果我选择month
作为我的决议:
SELECT date_trunc('month', timestamp), COUNT(DISTINCT(foo)) FROM ...
然后所有结果条目都在每个月的开头,因此“2017-01-01”将计算timestamp
字段在1月份的任何位置的唯一条目。
有没有办法指定一个偏移量,以便我可能在2017-01-15有一个条目,包括截至2017-02-15的条目?
感谢。
答案 0 :(得分:0)
SELECT
date_trunc('month', timestamp + interval '15 day'),
COUNT(DISTINCT(foo))
FROM ...
group by 1
答案 1 :(得分:0)
这种查询从来都不是很有效。如果速度是一个问题,也许最好通过循环使用应用程序语言
在数据库之外执行此操作在子查询中,对于每条记录,我们生成一系列日期,将其包含在聚合中,然后我们按生成的日期进行聚合。
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数据类型。