簡體   English   中英

按周期分組 Postgresql

[英]Group by a period Postgresql

我正在嘗試按一段時間對下表(示例)進行分組:

------------------
|month|year|value|
------------------
|7    |2019|1.2  |
|8    |2019|1.7  |
|9    |2019|1.5  |
|10   |2019|0.7  |
|11   |2019|0.2  |
|12   |2019|1.7  |
|1    |2020|1.0  |
|2    |2020|0.1  |
|3    |2020|2.1  |
|4    |2020|1.2  |
|5    |2020|1.2  |
|6    |2020|1.7  |
|7    |2020|2.1  |
|8    |2020|1.7  |
|9    |2020|1.5  |
|10   |2020|0.7  |
|11   |2020|0.2  |
|12   |2020|1.7  |
|1    |2021|1.0  |
|2    |2021|0.1  |
|3    |2021|2.1  |
|4    |2021|1.2  |
|5    |2021|1.7  |
|6    |2021|1.5  |
Etc..

從 7 月(7 日)到 6 月(次年的 6 月),我必須每 12 個月進行一次分組。

我已經嘗試了一些在網上找到的解決方案,但對我沒有用,有人有解決方案嗎?

我正在使用 Postgresql。

提前致謝

一種方法是使用算術

select floor((year * 12 + month - 7) / 12) as effective_year, avg(value)
from t
group by effective_year;

@GordonLinoff 有適當的解決方案,僅缺少有效年份涵蓋的實際期間。 但是,使用 Effective_year 和幾個內置函數很容易得出該時期: daterangemake_date

select daterange(make_date(effective_year  ,07 ,01)  
                ,make_date(effective_year+1,06 ,30) 
                ,'[]'
                )
     , avg_value
  from (select floor((year * 12 + month - 7) / 12)::integer as effective_year
             , avg(value) avg_value
          from test_data
         group by effective_year 
       ) da
 order by effective_year; 

查看完整示例

暫無
暫無

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

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