无公共键表间运算:用Impala求最值后关联日期数值表计算
解决Impala中跨表数值相乘的问题
首先,你已经搞定了从两张无公共键的表中提取价格并计算最大值的核心逻辑,接下来要把这个最大值和第三张表的指定日期数值相乘,其实只需要把之前的最大值查询作为子查询或者CTE,再和目标表关联计算就行。
我给你两种实现方式,你可以根据自己的习惯选择:
方法1:子查询直接嵌入
这种方式简洁直接,把获取最大价格的查询作为标量子查询,直接和目标表中符合日期条件的数值相乘:
SELECT (SELECT Max(price) FROM ( select close AS price from tableA UNION select strike AS price from tableB ) AS T1) * value AS final_result FROM your_date_table -- 替换成你那张含日期和数值的表名 WHERE date = '1-16-15'; -- 注意日期格式要和表中存储的完全一致
方法2:用CTE(公共表表达式)提升可读性
如果后续逻辑可能扩展,用CTE会让代码结构更清晰,先单独计算出最大价格,再和目标表关联:
WITH calculated_max_price AS ( SELECT Max(price) AS max_price_val FROM ( select close AS price from tableA UNION select strike AS price from tableB ) AS T1 ) SELECT cmp.max_price_val * dt.value AS final_result FROM calculated_max_price cmp -- 因为max_price只有一行,用CROSS JOIN就能关联到目标表的匹配行 CROSS JOIN your_date_table dt WHERE dt.date = '1-16-15';
注意事项:
- 替换
your_date_table为你实际的表名,确保字段名(比如date和value)和你的表结构一致; - 如果你的
date字段是DATE类型而非字符串,可能需要转换格式来匹配,比如用TO_DATE(dt.date, 'MM-dd-yy') = '2015-01-16'(根据实际存储的日期格式调整); - 如果目标表中
1-16-15对应的数值有多行,上述查询会返回每行的乘积结果;若需要汇总(比如总和),可以在SELECT语句中使用SUM(cmp.max_price_val * dt.value)。
这样执行后,就能得到你想要的200 * 40 = 8000的结果啦。
内容的提问来源于stack exchange,提问作者James Xiang
相关产品推荐
相关产品推荐

