我有一个带有日期和一些计数的表,如下所示:
| Date | Count |
| 2019-01-02 | 100 |
| 2019-01-03 | 101 |
| 2019-01-04 | 99 |
| 2019-01-05 | 95 |
| 2019-01-06 | 90 |
| 2019-01-07 | 88 |
鉴于此表,我要计算的是对每个日期的前3天的计数求和,如下所示:
| Date | Prev3DaysCount |
| 2019-01-02 | 0 |
| 2019-01-03 | 100 |
| 2019-01-04 | 201 |
| 2019-01-05 | 300 |
| 2019-01-06 | 295 |
| 2019-01-07 | 284 |
例如,2019-01-07的Prev3DaysCount为284是来自前3天(99 + 95 + 90)。我认为可以使用SUM窗口功能,但无法弄清楚如何将窗口限制为前3天。
答案 0 :(得分:2)
您可以使用窗口函数(连同COALESCE
一起将null
(在第一行中)转换为0):
SELECT
day,
COALESCE(
SUM(count) OVER (ORDER BY day ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING),
0
) AS Prev3DaysCount
FROM t;
返回:
┌────────────┬────────────────┐
│ day │ prev3dayscount │
├────────────┼────────────────┤
│ 2019-01-02 │ 0 │
│ 2019-01-03 │ 100 │
│ 2019-01-04 │ 201 │
│ 2019-01-05 │ 300 │
│ 2019-01-06 │ 295 │
│ 2019-01-07 │ 284 │
└────────────┴────────────────┘
(5 rows)