如何按MeasID分区计算列中前10条数据的平均值?
解决方案
你提到的ntile()确实不适合这个场景,因为它是将分区内的数据均分成指定数量的组,无法精准取固定条数的前N条。正确的做法是使用ROW_NUMBER()窗口函数来标记每个MeasID分区内的记录顺序,再筛选前10条计算平均值。
假设你的源表名为your_table,创建视图的SQL代码如下:
CREATE VIEW vw_measid_top10_variable_avg AS SELECT MeasID, AVG(Variable) AS top10_variable_average FROM ( SELECT MeasID, Variable, -- 按MeasID分区,替换<排序字段>为你需要的排序依据(比如测量时间、Variable值等) ROW_NUMBER() OVER (PARTITION BY MeasID ORDER BY <排序字段>) AS row_num FROM your_table ) ranked_data WHERE row_num <= 10 GROUP BY MeasID;
说明:
- 内层子查询通过
ROW_NUMBER()给每个MeasID下的记录按指定顺序编号,确保能精准定位前10条 - 外层查询筛选编号≤10的记录,再按
MeasID分组计算对应Variable的平均值 - 如果某个
MeasID下的记录不足10条,会自动计算现有所有记录的平均值,无需额外处理
内容的提问来源于stack exchange,提问作者HarryB
相关产品推荐
相关产品推荐

