如何解决要获得最低2个值的滚动平均值的功能?
这是我的示例数据,其中current_Rating列是我想要的输出。
Date Name Subject Importance Location Time Rating Current_rating
12/08/2020 David Work 1 London - - 4
1/08/2020 David Work 3 London 23.50 4 3.66
2/10/2019 David Emails 3 New York 18.20 3 4.33
2/08/2019 David Emails 3 Paris 18.58 4 4
11/07/2019 David Work 1 London - 3 4
1/06/2019 David Work 3 London 23.50 4 4
2/04/2019 David Emails 3 New York 18.20 3 5
2/03/2019 David Emails 3 Paris 18.58 5 -
12/08/2020 George Updates 2 New York - - 2
1/08/2019 George New Appointments5 London 55.10 2 -
我需要使用一个函数来获取current_Rating列中的值。current_Rating从Rating列中为每个名称获取前5个结果,然后消除最低的2个结果,然后获取其余3个的平均值。名称可能没有5个结果,因此如果3个或以下,我将只需要获取结果的平均值,如果4个结果,则我需要消除最小值并取其余3个结果的平均值。同样要获得正确的5个以前的结果将需要按日期排序。这可能吗?谢谢您的时间。
解决方法
多么痛苦!我认为最简单的方法可能是使用数组,然后使用unnest()
进行聚合:
select t.*,r.current_rating
from (select t.*,array_agg(rating) over (partition by name order by date rows between 4 preceding and current row) as rating_5
from t
) t cross join lateral
(select avg(r) as current_rating
from (select u.*
from unnest(t.rating_5) with ordinality u(r,n)
where r is not null
order by r desc desc
limit 3
) r
) r
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。