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,所以它只是为了找到这个想法.(顺便说一句,我没有访问日期格式化功能)
我将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)
灵感来自:Postgresql SQL GROUP BY时间间隔,任意精度(低至毫秒)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |