簡體   English   中英

使用date_trunc的滾動平均值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM