GROUP BY下个月超过N年

Pie*_*NAY 6 sql postgresql group-by aggregation

我需要在下个月超过5年的时间内按"地平线"12分组:
假设我们是2015-08-15

SUM amount from  0 to 12 next months (from 2015-08-16 to 2016-08-15)
SUM amount from 12 to 24 next months (from 2016-08-16 to 2017-08-15)
SUM amount from 24 to 36 next months ...
SUM amount from 36 to 48 next months
SUM amount from 48 to 60 next months
Run Code Online (Sandbox Code Playgroud)

这是一个摆弄的数据集示例:

+----+------------+--------+
| id | date       | amount |
+----+------------+--------+
|  1 | 2015-09-01 |     10 |
|  2 | 2015-10-01 |     10 |
|  3 | 2016-10-01 |     10 |
|  4 | 2017-06-01 |     10 |
|  5 | 2018-06-01 |     10 |
|  6 | 2019-05-01 |     10 |
|  7 | 2019-04-01 |     10 |
|  8 | 2020-04-01 |     10 |
+----+------------+--------+
Run Code Online (Sandbox Code Playgroud)

这是预期的结果:

+---------+--------+
| horizon | amount |
+---------+--------+
|       1 |     20 |
|       2 |     20 |
|       3 |     10 |
|       4 |     20 |
|       5 |     10 |
+---------+--------+
Run Code Online (Sandbox Code Playgroud)

我怎样才能将这12个月的12个月分为"视野"?


我标记了PostgreSQL但我实际上使用的是ORM,所以它只是为了找到这个想法.(顺便说一句,我没有访问日期格式化功能)

wid*_*wid 6

我将12个月的时间框架和分组分开:

SELECT
  FLOOR(
      (EXTRACT(EPOCH FROM date) - EXTRACT(EPOCH FROM now()))
        / EXTRACT(EPOCH FROM INTERVAL '12 month')
    ) + 1 AS "horizon",
  SUM(amount) AS "amount"
FROM dataset 
GROUP BY horizon
ORDER BY horizon;
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

灵感来自:Postgresql SQL GROUP BY时间间隔,任意精度(低至毫秒)