google-bigquery - 如何使用 BigQuery 获取每个记录组的最后 3 条记录的平均值?
问题描述
我有一个 BigQuery 表,其中包含ids
和values
。我想获得每个 id 的最后 3 条记录的平均值。
WITH t0 as (SELECT 1 as bigid, 1 as id, 10 as value
UNION ALL
SELECT 2, 1, 14
UNION ALL
SELECT 3, 1, 18
UNION ALL
SELECT 4, 1, 11
UNION ALL
SELECT 5, 1, 13
UNION ALL
SELECT 6, 1, 14
UNION ALL
SELECT 7, 2, 19
UNION ALL
SELECT 8, 2, 19
UNION ALL
SELECT 9, 2, 11
UNION ALL
SELECT 10, 2, 13
UNION ALL
SELECT 11, 2, 14
UNION ALL
SELECT 12, 2, 19
UNION ALL
SELECT 13, 3, 19)
SELECT id, AVG(value) OVER (PARTITION BY id ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) FROM t0
此查询返回窗口内每条记录的结果。如何获取每个 id 的最后 3 条记录的平均值?
预期产出
解决方案
您当前的查询是正确的,只是它ORDER BY
在调用中缺少一个子句AVG
:
WITH cte AS (
SELECT *, AVG(value) OVER (PARTITION BY id ORDER BY bigid
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) avg_last_3
FROM t0
)
SELECT DISTINCT id, avg_last_3
FROM cte
ORDER BY id;
推荐阅读
- reactjs - 当我发布它时,它会在几分钟后使用 react js 中的服务出现
- git - GitLab 合并来自两个分支的更改
- javascript - ReactJS:获取错误无法读取属性
- laravel - 对于 AltThree/Locker 包 laravel 如何定义 Redis 连接?
- excel - 如果整数删除小数 - Excel
- android - Jetpack compose 中的波浪盒
- c# - 在 C# 中检查是否存在仅具有部分名称的文件夹
- asp.net - 根据 asp.net 身份中的角色将登录用户或管理员重定向到特定页面或视图
- mysql - 在 Node.JS 中使用更新查询来执行算术计算(从起点扣除,信用目标)
- python - cv.imread 的内存问题