sql - 使用子查询计算最后 5 行样本的列的 AVG
问题描述
试图找出构建此查询的最佳方法。我只是想获得每个 AVG()beta
的最后 5 行/天symbol
。然后用这个数字,我想symbols
从最后 5 行/天中找到所有组合的总平均值。
当我从头开始构建查询时,我正在测试要使用的变量。
SELECT DISTINCT symbol, beta
FROM api.security_stats
WHERE date = (SELECT MAX(date) FROM api.security_price) - interval '1 day' AND
symbol in ('AAPL','MSFT','AMD','NVDA','TSLA')
GROUP BY symbol, beta;
symbol | beta
--------+--------------------
AAPL | 1.226175475928623
AMD | 1.2651464334484317
MSFT | 1.0922307100829312
NVDA | 1.3928523562615582
TSLA | 1.7399931738843037
上面我只能得到一天的行beta
。
SELECT DISTINCT symbol, beta
FROM api.security_stats
WHERE date = (SELECT MAX(date) FROM api.security_price) - interval '5 day' AND
symbol in ('AAPL','MSFT','AMD','NVDA','TSLA')
GROUP BY symbol, beta;
symbol | beta
--------+------
(0 rows)
在这里,我尝试获取最近 5 天的数据,但没有显示任何数据。
如何创建一个返回每个 5 天 beta 平均值的子查询,symbol
然后将该子查询添加到将计算子查询总结果的平均值的主查询中?
解决方案
如果我理解正确,您可以使用row_number()
:
SELECT symbol, AVG(beta) as avg_beta
FROM (SELECT ss.*,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) as seqnum
FROM api.security_stats ss
) s
WHERE seqnum <= 5
GROUP BY symbol;
然后对整体平均值使用另一个子查询:
SELECT avg(avg_beta)
FROM (SELECT symbol, AVG(beta) as avg_beta
FROM (SELECT ss.*,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) as seqnum
FROM api.security_stats ss
) ss
WHERE seqnum <= 5
) ss;
GROUP BY symbol;
注意:如果所有符号都有天,那么您可以使用:
SELECT avg(avg_beta)
FROM (SELECT ss.*,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) as seqnum
FROM api.security_stats ss
) ss
WHERE seqnum <= 5;
推荐阅读
- javascript - 为什么我的 localStorage 不显示容器中的数据?它在控制台中显示我的数组,我没有收到任何错误消息
- javascript - 替换全球网站上的公司图标
- sql-server - t-sql INSTEAD OF 删除一行 PRINT its id
- r - 根据其他列 R 的因素重命名级别
- python - 有什么方法可以让我使用 pydrive 在 Google 驱动器中读取多种不同的文件类型,如 xlsv、csv、xls?
- python - / 不支持的操作数类型:“Vat”和“int”
- git - Git 再次签出仅最初从另一个分支签出的文件
- wpbakery - 如何更改 WP Bakery 中的堆叠行顺序?
- javascript - 我正在尝试使用 puppeteer 在页面上自动登录,一旦我在下一页上登录,我想单击下一页上的按钮
- java - 转换为浮点数/从浮点数转换时 BigDecimal 不保留舍入值