Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何优化嵌套Inner配置单元查询_Sql_Hadoop_Hive - Fatal编程技术网

Sql 如何优化嵌套Inner配置单元查询

Sql 如何优化嵌套Inner配置单元查询,sql,hadoop,hive,Sql,Hadoop,Hive,我有一个包含以下股票数据的表,其中有两列,如日期、股票代码、开盘和收盘(股票价格) 要查询这些数据,我想知道哪只股票在特定日期的利润率最高。因此,如果我有516种不同的股票,我的查询应该返回516行股票代码、日期、开盘价、收盘价和一个新的列边距(将是max(close-open)) 我写了一个问题,我的方法是: 步骤1-获取收盘价和开盘价之间的差额(内部/子查询) 步骤2-获取每种股票的最大保证金(使用group by和max函数) 第3步-将结果与主表连接并获取数据 我将把我的问题放在解决

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

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

我写了一个问题,我的方法是:

  • 步骤1-获取收盘价和开盘价之间的差额(内部/子查询)
  • 步骤2-获取每种股票的最大保证金(使用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;

对于这个查询,我们是否有其他选择,或者是否可以对其进行优化。

这与MySQL有什么关系吗?如果没有,请移除标签。准确地标注你的问题有助于你吸引最有能力给你答案的人的注意。您能同时发布您当前的查询吗?@BillKarwin-谢谢您的建议。@VamsiPrabhala您能检查一下我的查询吗。我现在贴在下面。
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;