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