sql - 尝试使用 LAG 计算行之间的百分比变化
问题描述
我正在尝试计算前几行之间的百分比变化。理想的目标是按日期获取变量的最新数据marketcap
,后跟代表每行一天的 LIMIT。
如果有更好的方法来使用带有时间窗口的 LAG 函数,那可能会更好?
这是我的查询:
SELECT symbol,
date,
marketcap,
marketcap - 100.0 * (LAG(marketcap) OVER (ORDER BY date DESC) / marketcap) AS percent_change
FROM api.security_stats
WHERE symbol in ('AAPL','TSLA')
LIMIT 254;
我无法获得行之间的百分比差异。我查看了其他堆栈溢出并尝试创建类似的函数,但我永远无法获得行之间的百分比差异。
我该如何解决上面的查询呢?
编辑:样本数据:
symbol | date | marketcap
--------+------------+---------------
AAPL | 2020-09-29 | 1978012557000
AAPL | 2020-09-30 | 2007832713000
AAPL | 2020-10-01 | 2024823267000
AAPL | 2020-10-02 | 1959461646000
AAPL | 2020-10-05 | 2019795450000
AAPL | 2020-10-06 | 1961888868000
AAPL | 2020-10-07 | 1995176484000
AAPL | 2020-10-08 | 1993269381000
AAPL | 2020-10-09 | 2027943981000
AAPL | 2020-10-12 | 2156760120000
AAPL | 2020-10-13 | 2099547030000
AAPL | 2020-10-14 | 2101107387000
AAPL | 2020-10-15 | 2092785483000
AAPL | 2020-10-16 | 2063485446000
AAPL | 2020-10-19 | 2010780054000
AAPL | 2020-10-20 | 2037306123000
AAPL | 2020-10-21 | 2026210251000
AAPL | 2020-10-22 | 2006792475000
AAPL | 2020-10-23 | 1994482992000
AAPL | 2020-10-26 | 1994656365000
AAPL | 2020-10-27 | 2021529180000
AAPL | 2020-10-28 | 1927907760000
AAPL | 2020-10-29 | 1999337436000
AAPL | 2020-10-30 | 1887338478000
AAPL | 2020-11-02 | 1849285786000
AAPL | 2020-11-03 | 1877678792000
解决方案
大概,您想要每个符号的计算。如果是这样:
SELECT symbol, date, marketcap,
(marketcap - LAG(marketcap) OVER (PARTITION BY symbol ORDER BY date)) * 100.0 / marketcap AS percent_change
FROM api.security_stats
WHERE symbol in ('AAPL','TSLA')
LIMIT 254;
我也调整了计算。
请注意,LAG()
通常不与ORDER BY DESC
. 如果您想要下一行,请使用LEAD()
.
推荐阅读
- java - 从 Java 运行 plink 版本的 PuTTY
- python - 使用 2 级嵌套数组将数据帧转换为 JSON
- android-recyclerview - RecyclerView 里面 RecyclerView 里面 RecyclerView
- typescript - 使用布尔常量检查参数是否定义
- javascript - Materialize.css: Expand the first Collapsible div on Page load
- java - 取消无限循环
- ruby-on-rails - Google::Apis::RateLimitError: userRateLimitExceeded: 超出用户速率限制。用户请求率超过配置的项目配额
- hyperledger-fabric - 使用 Composer 在 HyperLedger Fabric 中基于标准的事件订阅
- ios - 如何在 iOS 中使用 googlemap 创建 customMarkerView
- node.js - EISDIR:对目录的非法操作,读取+Nodemailer图片附件