gpt4 book ai didi

sql - 如何优化嵌套的内部配置单元查询

转载 作者:可可西里 更新时间:2023-11-01 15:26:10 25 4
gpt4 key购买 nike

我有一个包含以下股票数据的表格,其中有几列,例如日期、代码、开盘价和收盘价(股票价格)。

要查询此数据,我想知道哪只股票在特定日期的 margin 最高。因此,如果我有 516 只不同的股票,我的查询应该返回 516 行代码、日期、开盘价、收盘价和一个新列 Margin(这将是 ma​​x(close-open))。

| deep_stocks.date_  | deep_stocks.ticker  | deep_stocks.open  | deep_stocks.close  |
+--------------------+---------------------+-------------------+--------------------+--+
| 20100721 | A | 27.68 | 27.58 |
| 20100722 | A | 27.95 | 28.72 |
| 20100723 | A | 28.56 | 29.3 |
| 20100726 | A | 29.22 | 29.64 |
| 20100727 | A | 29.73 | 28.87 |
| 20100728 | A | 28.79 | 28.78 |
| 20100729 | A | 28.97 | 28.15 |
| 20100730 | A | 27.78 | 27.93 |
| 20100802 | A | 28.35 | 28.82 |
| 20100803 | A | 28.7 | 27.84 |

我写了一个查询,我的方法是:

  • 第 1 步 - 获取收盘价和开盘价之间的差值(内部/子查询)
  • 第 2 步 - 获取每只股票的最大 margin (使用 group by 和 max 函数)
  • 第 3 步 - 将结果与主表合并并获取数据。

我会将我的查询放在解决方案或评论中,有人可以更正它吗,因为它需要更多时间。我也想知道我们是否还有其他替代方法。

最佳答案

如前所述,请参阅以下查询:

SELECT ds.ticker, ds.date_, ds.close, ds.open, ds.Margin FROM 
(SELECT ticker, date_, close, open, case(close-open)>0 when true then round(close-open,2) else 0 end as Margin FROM DataStocks) ds
JOIN
(SELECT dsIn.ticker, max(dsIn.Margin) mxMargin FROM
(select ticker, case(close-open)>0 when true then round(close-open,2) else 0 end as Margin FROM DataStocks ) dsIn group by dsIn.ticker) dsEx
ON ds.ticker=dsEx.ticker AND ds.Margin=dsEx.mxMargin ORDER BY ds.Margin;

对于这个查询,我们是否有任何其他替代方案,或者是否有可能对其进行优化。

关于sql - 如何优化嵌套的内部配置单元查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46979847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com