[英]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 和幾個內置函數很容易得出該時期: daterange和make_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.