我有一个收入表的收入值数据集。
我需要计算当前日期前60天每天的标准偏差。当计算标准偏差时,我按如下方式运行它:
SELECT
[Date],Brand,[Country],[Marketing Channel],
STDEV(Revenue) OVER (PARTITION BY Brand, Country,[Marketing Channel]
ORDER BY [Date] ROWS BETWEEN 2 PRECEDING and 1 PRECEDING)
as STD
FROM RevTable
问题是分区内的极值会使标准偏差向上或向下倾斜。我希望过滤分区本身中的极值。
我如何过滤掉这种结构中的极值(基于百分比的过滤是我想要的)?
日期 | 品牌 | 国家营销渠道 | >收入|
---|---|---|---|
2021年1月 | FunGames | 加拿大SEO | 3578834美元|
2021年1月1日 | FunGames加拿大 | 社交网络>90000美元 | |
2021年1月1日 | FunGames | 荷兰 | SEO>682943美元 |
2021年1月2日 | FunGames | 加拿大SEO3731849美元 | |
2021年1月2日 | FunGames加拿大 | 社交网络<257美元>||
2021年1月2日 | FunGames | 荷兰SEO627272美元 | |
2021年1月3日 | FunGames | 加拿大SEO<2418136美元>||
2021年1月3日 | FunGames | 加拿大社交网络 | >40美元 |
2021年1月3日 | FunGames | 荷兰SEO>479642美元 | |
2021年4月1日 | FunGames | 加拿大SEO<22231254美元>||
2021年4月1日 | FunGames | 加拿大社交网络 | $-//tr>|
2021年4月1日 | FunGames | 荷兰SEO>635715美元 | |
2021年5月1日 | FunGames | 加拿大SEO2686366美元 | |
2021年5月1日 | FunGames | 加拿大社交网络 | <177美元>|
2021年5月1日 | FunGames | 荷兰SEO>499026美元 | |
2021年5月1日 | FunGames | 荷兰 | 社交网络$-//tr>|
2021年6月1日 | FunGames | 加拿大SEO<2096472>||
2021年6月1日 | FunGames | 加拿大社交网络 | >465美元 |
2021年6月1日 | FunGames | 荷兰SEO>653359美元 | |
2021年6月1日 | FunGames | 荷兰社交网络 | $-//tr>|
2021年7月1日 | FunGames | 加拿大SEO<2962476美元>||
2021年7月1日 | FunGames | 加拿大社交网络 | >663美元 |
2021年7月1日 | FunGames | 荷兰SEO>$747990 | |
2021年8月1日 | FunGames | 加拿大SEO>3092163美元 | |
2021年8月1日 | FunGames | 加拿大社交网络 | <156美元>|
2021年8月1日 | FunGames | 荷兰SEO>655688美元 | |
2021年8月1日 | FunGames | 荷兰社交网络 | $-//tr>|
2021年9月1日 | FunGames | 加拿大SEO3110117美元 | |
2021年9月1日 | FunGames加拿大 | 社交网络<153美元>||
2021年9月1日 | FunGames | 荷兰SEO571313美元 | |
2021年9月1日 | FunGames | 荷兰 | 社交网络$-//tr>|
2021年10月1日 | FunGames | 加拿大SEO>3024675美元 | |
2021年10月1日 | FunGames | 加拿大社交网络 | >68美元 |
2021年10月1日 | FunGames | 荷兰SEO462699美元 | |
2021年10月1日 | FunGames | 荷兰 | 社交网络>563美元 |
2021年11月1日 | FunGames | 加拿大SEO2552153美元 | |
2021年11月1日 | FunGames加拿大 | 社交网络<275美元>||
2021年11月1日 | FunGames | 荷兰 | SEO$725954//tr>
你没有解释什么"极值";是但是您可以只使用CASE
表达式。例如,如果您只想要介于10和100之间的值:
SELECT rt.*
STDEV(CASE WHEN Revenue >= 10 AND Revenue <= 100 THEN Revenue END) OVER
(PARTITION BY Brand, Country, [Marketing Channel]
ORDER BY [Date]
ROWS BETWEEN 2 PRECEDING and 1 PRECEDING
) as STD
FROM RevTable rt ;
与大多数聚合和窗口函数一样,STDEV()
忽略NULL
值。