簡體   English   中英

[Postgres][SQL]Window 函數(計數/平均值)按周分區

[英][Postgres][SQL]Window functions (count/average) where partitioning by weeks

有沒有辦法運行 window function ,其中分區用於日期列,我需要每周匯總一次值。

例如在這個數據集中

日期 價值
01-01-2022 10
02-01-2022 15
2022 年 10 月 1 日 01
2022 年 11 月 1 日 12
20-01-2022 09
25-01-2022 08

我想要一個 window function 來計算 2022 年第一周(從 01-01-2022 開始)以及隨后幾周的值列的平均值。

目前為每個條目創建一個帶有周數的新列,並在該新列上進行分區是我能想到的解決這個問題的唯一方法。 在 Postgres 的 window 函數中是否有一種我不熟悉的更優雅的方式。

像這樣的東西?

SELECT  date
    ,   value
    ,   TO_CHAR(date, 'WW')::INT AS weeknumber
    ,   AVG(value) OVER(PARTITION BY TO_CHAR(date, 'WW')::INT)
FROM    table_name
ORDER BY date;

通常我不使用 WW,但 IW 使用 ISO 周編號。 但這取決於你。

使用 PG14+ date_bin function 是一個不錯的選擇。 這里是 PG14 之前的 date_bin 實現。

select date_bin('1 week', "Date", '2022-01-01') as "Week", 
       avg("Value") as "Avg"
from the_table 
group by "Week"; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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