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

标签 sql hadoop hive

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

要查询此数据,我想知道哪只股票在特定日期的 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/

相关文章:

hadoop - 使用 Spark 在 HQL 中进行 CRUD 操作

apache-spark - 在HIVE中执行查询,但看不到结果

mysql - 实现图树的最佳数据库结构

php - MySQL 查询根据特定标记组合在获取行时返回不需要的行

php - 检查mysql字段是否包含mysql查询中的某个数字

sql - : operator for DQL queries

hadoop - jps列出了datanodes,但没有列出dfsadmin。无法复制到HDFS

hadoop - Hive中 'Stored as InputFormat, OutputFormat'和 'Stored as'的区别

java - 在 EMR 上找不到类 Main$MapClass

hive - Hive中group by后是否可以连接字符串字段