Ниже для BigQuery Standard SQL
#standardSQL
CREATE TEMP FUNCTION avg_array(arr ANY TYPE) AS ((
SELECT AVG(val) FROM(
SELECT val FROM UNNEST(arr) val ORDER BY val DESC LIMIT 3)
)
);
SELECT time,
avg_array(x) avg_x,
avg_array(y) avg_y
FROM `project.dataset.table`
если применить к вашим данным выборки - результат
Row time avg_x avg_y
1 00:01:00 1.5268333333333333 1.748
2 00:02:00 1.5666666666666669 2.3483
Более общая версия (ниже) позволяет вам передать, сколько топовых элементов на счет
#standardSQL
CREATE TEMP FUNCTION avg_array(arr ANY TYPE, cnt INT64) AS ((
SELECT AVG(val) FROM(
SELECT val, ROW_NUMBER() OVER(ORDER BY val DESC) pos FROM UNNEST(arr) val
)
WHERE pos <= cnt
));
SELECT time,
avg_array(x, 3) avg_x,
avg_array(y, 3) avg_y
FROM `project.dataset.table`