sql - SQLite - 滚动平均/总和
问题描述
我有一个如下所示的数据集,想知道如何对其当前记录和接下来的两条记录进行滚动平均。示例:让我们考虑第一个记录,其总数为 3,然后是 4 和 7,现在第一个记录的滚动 3 天平均值将是 4.6,依此类推。
Date Total
1 3
2 4
3 7
4 1
5 2
6 4
预期输出:
Date Total 3day_rolling_Avg
1 3 4.6
2 4 4
3 7 3.3
4 1 2.3
5 2 null
6 4 null
PS:拥有“null”值并不重要。这只是我需要查看超过 3 天的示例数据(例如:30 天滚动)
解决方案
我认为最简单的方法是 window avg()
,带有 poper 窗口框架:
select
t.*,
avg(total)
over(order by date rows between current row and 2 following) as "3d_rolling_avg"
from mytable t
如果您想在null
少于 2 个前导行时返回一个值,如您的预期结果所示,那么您可以row_number()
在它之上使用:
select
t.*,
case when rank() over(order by date desc) <= 2
then avg(total)
over(order by date rows between current row and 2 following)
end as "3d_rolling_avg"
from mytable t
推荐阅读
- c# - EF Core、DI、存储库模式和基本存储库结构问题
- swift - 使用 segue 快速传递变量
- python-3.x - 加密时不返回 ASCII 字符
- c# - 如何使用 C# 验证加盐和散列密码
- c# - 尝试将 Quartz.NET 与 oWin 一起使用时出现 Quartz.Simpl.JsonObjectSerializer 错误
- reactjs - TypeScript tsc 没有任何响应
- java - 如何在编辑文本中找到光标的位置以从该位置选择文本?
- python - 如何使用 | 进行正则表达式?
- c - 为什么我的代码中出现这个括号错误?
- java - jpackage 创建 2 个 JRE 副本