配置单元中的多个select语句

dl5txlt9  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(289)

我对 hive 还很陌生。我有一个名为stats的表,如下所示

from_date  |  to_date   |   customer_name |  callcount
-------------------------------------------------------
2016_01_01 | 2016_01_02 |  ABC            | 25  
2016_01_02 | 2016_01_03 |  ABC            | 53  
2016_01_03 | 2016_01_04 |  ABC            | 44  
2016_01_04 | 2016_01_05 |  ABC            | 55

我想建立一个配置单元查询将接受:a)当前时间范围(从和到时间)b)以前的时间范围(从和到时间)c)客户名称
例如:输入将是:当前时间范围可以是从时间(2016年1月3日)到时间(2016年1月5日)当前时间范围可以是从时间(2016年1月1日)到时间(2016年1月2日)客户名称可以是
我想显示的结果是:当前通话次数(当前时间范围的通话次数之和)、前一通话次数(前一时间范围的通话次数之和)以及当前通话次数和前一通话次数之差
这样地:

customer | current_call_count | previous_call_count | Diff
---------------------------------------------------------
ABC      | 99                 | 25                  | 74

我构建的查询是:

select * from 
(
select sum(callCount) as current_count from stats 
where customer_name='ABC' and from_date>='2016-04-03' and to_date<='2016-04-05'
UNION ALL
select sum(callCount) as current_count from stats 
where customer_name='ABC' and from_date>='2016-04-01' and to_date<='2016-04-02'
  ) FINAL

我无法获得计算结果,也无法将结果显示为列。请帮忙

qjp7pelc

qjp7pelc1#

尝试条件聚合:

select 
    sum(case when from_date >= '2016_01_04' and to_date <= '2016_01_05' then callcount else 0 end)
    as current_call_count,
    sum(case when from_date >= '2016_01_02' and to_date <= '2016_01_03' then callcount else 0 end)
    as previous_call_count,
    sum(case when from_date >= '2016_01_04' and to_date <= '2016_01_05' then callcount else 0 end)
    - sum(case when from_date >= '2016_01_02' and to_date <= '2016_01_03' then callcount else 0 end)
    as difference
from stats
where customer_name = 'ABC'

注意,您的示例数据使用 _ 而不是 - (在查询中使用)作为日期分隔符。

相关问题