根据不同标准提取数据

时间:2018-04-15 01:15:49

标签: sql impala

因此,我试图从给定2015年每个月的特定日期的数据集中提取日期,执行价格和询价,其中额外的限制适用于执行价格,我们希望其最大执行价格与相应的要价。例如,在日期A,我们希望在日期B上最大(执行价格< = x1)和max(执行价格< = x2)。所以我想写10个SELECT语句来实现这个,但这似乎是效率低下。下面是我写的一个示例查询:

SELECT currentdate,max(strike),ask
FROM opt
WHERE currentdate between '2015-01-16' and '2015-01-16'
AND T='P'
AND strike <=191.55;

当我在黑斑羚中运行时,我有错误:

在没有Kerberos身份验证的情况下启动Impala Shell 错误:AnalysisException:选择不是由聚合输出生成的列表表达式(GROUP BY子句中缺少?):currentdate

我为格式错误道歉,不熟悉Stackover。

1 个答案:

答案 0 :(得分:0)

如果您的预期输出是当天最高点击日期列表和询问,那么您需要按当前日期字段进行分组,否则查询引擎无法理解您希望特定日期的最大值。您现在拥有的查询无法运行,因为如果您不提供多条记录,则max不可用(没有组,您的记录集是单独的行,而不是汇总的行)。

你错过了一个分组依据:

SELECT currentdate,max(strike),ask
FROM opt
WHERE currentdate between '2015-01-16' and '2015-01-16'
AND T='P'
AND strike <=191.55
GROUP BY currentdate;

这也会返回错误:

但是您还需要为ask列提供聚合语句。这可能是最大值,平均值,最小值,具体取决于您的确切用例。

SELECT currentdate,max(strike),min(ask)
FROM opt
WHERE currentdate between '2015-01-16' and '2015-01-16'
AND T='P'
AND strike <=191.55
GROUP BY currentdate;