SQL需求:仅当8天窗口内非空值≥6个时计算滚动平均值
解决方案
要实现仅当8天窗口内非空VALUEX数量≥6时计算滚动平均值,你需要在原查询的CASE语句中增加对窗口内非空值数量的判断,具体修改如下:
- 在窗口中使用
COUNT(VALUEX)统计非空值数量(COUNT(列名)会自动忽略NULL值) - 同时保留原有的行号判断(确保窗口包含足够的记录行),并将两个条件用
AND连接 - 仅当两个条件都满足时,才返回滚动平均值,否则返回
NULL
修改后的完整查询语句:
SELECT CASE WHEN -- 确保窗口有至少8条记录(对应前8天的数据行) ROW_NUMBER() OVER (ORDER BY DATEX) > 8 -- 同时检查窗口内非空VALUEX数量≥6 AND COUNT(VALUEX) OVER ( ORDER BY DATEX DESC ROWS BETWEEN 1 FOLLOWING AND 8 FOLLOWING ) >= 6 THEN AVG(VALUEX) OVER ( ORDER BY DATEX DESC ROWS BETWEEN 1 FOLLOWING AND 8 FOLLOWING ) ELSE NULL END AS rolling_avg_8d FROM ( SELECT * FROM TABLEX ) s
关键说明
COUNT(VALUEX) OVER (...):精准统计窗口内非空的VALUEX条数,自动排除NULL值- 两个条件的逻辑:先通过行号判断窗口是否有足够的记录行,再验证有效数据占比是否达标,避免因数据缺失导致的无效计算
内容的提问来源于stack exchange,提问作者Michele Cordini
相关产品推荐
相关产品推荐

