Amazon redshift 红移SQL:如何获得今天&x27;s计数和前3天的计数总和
我有一张表,上面有日期和一些计数,如下所示:Amazon redshift 红移SQL:如何获得今天&x27;s计数和前3天的计数总和,amazon-redshift,Amazon Redshift,我有一张表,上面有日期和一些计数,如下所示: | 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 | |
| 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年前3天的284天是(99+95+90)的前3天。我想我可以使用SUM window函数,但我不知道如何将窗口限制在前3天。您可以使用window函数(连同
合并
将null
(第一行)转换为0):
返回:
┌────────────┬────────────────┐
│ 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)
你总是一天一排吗?是否有缺失的日期值(如果有,缺失的值是否应计入“前3天”)?是的,每天只有一行,没有缺失的日期。谢谢@marth。如果在过去3天中缺少任何一天怎么办?我还没有这种情况,但将来可能会这样@kee:您需要在一个“日期”表上
左键联接
,该表包含所有日期(涵盖应用程序使用的日期范围)的列表,以填补空白。在Postgresql上,您通常会使用generate_series()
,但我认为它在Redshift上不可用。
┌────────────┬────────────────┐
│ 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)