Redshift SQL:如何获取今天的计数和前 3 天的计数总和
Posted
技术标签:
【中文标题】Redshift SQL:如何获取今天的计数和前 3 天的计数总和【英文标题】:Redshift SQL: How to get today's count and sum of counts from previous 3 days 【发布时间】:2019-10-15 17:22:31 【问题描述】:我有一张表,上面有日期和一些计数,如下所示:
| 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 年 1 月 7 日的 Prev3DaysCount 284 来自 (99+95+90) 的前 3 天。我想我可以使用 SUM 窗口功能,但我不知道如何将窗口限制为前 3 天。
【问题讨论】:
你一天总是有一行吗?是否有缺失的日期值(如果有,缺失值是否应计入“前 3 天”)? 是的,每天只有一行,没有缺一天。 【参考方案1】:您可以使用窗口函数(连同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)
【讨论】:
谢谢@marth。如果过去 3 天内有任何缺失天数怎么办?我还没有这种情况,但将来可能会! @kee:您需要在包含所有日期列表(涵盖您的应用程序使用的日期范围)的“日期”表上LEFT JOIN
来填补空白。在 Postgresql 上,您通常会使用 generate_series()
,但我不认为它在 Redshift 上可用。以上是关于Redshift SQL:如何获取今天的计数和前 3 天的计数总和的主要内容,如果未能解决你的问题,请参考以下文章
AWS Redshift SQL - PIVOT 查询(一行/行多次计数)