使用Case Hive查询查找ID是否匹配并替换

问题描述 投票:0回答:1

我有一个名为“ Scan”的客户交易记录表,其中对每个不同的交易均显示一次personal_id,并包含诸如scan_id之类的列。我还有另一个名为ids的表,该表包含从Scan Table

中采样的随机personal_ids

我想将idsscan结合在一起,并获得ID和scan_id的单个记录(如果它与某些值匹配)。

假设数据如下

扫描表

Ids          scan_id
----        ------
1           100
1           111
1           1000
2           100
2           111
3           124
4           1000
4           111


Ids table

id
1
2
3
4
5

我想要在输出下面,即,如果scan_id与100或1000相匹配

Id        MT
------    ------
1          1
2          1
3          0
4          1

我在下面的查询中执行并出现错误

select MT, d.individual_id
from  
(
  select 
    CASE 
      when scan_id in (90069421,53971306,90068594,136739913,195308160) then 1 
      ELSE 0
    END as MT
  from scan cs join ids r
 on cs.individual_id = r.individual_id
where 
        base_div_nbr =1 
        and 
        country_code ='US' 
        and
         retail_channel_code=1 
         and visit_date between '2019-01-01' and '2019-12-31'
) as d
group by individual_id;

我将很高兴与此Hive查询有关的任何建议或帮助。是否有一种有效的方法来完成这项工作。让我知道。

sql hive hiveql
1个回答
0
投票

使用group by

select s.individual_id,
      max(case when s.scan_id in (100, 1000) then 1 else 0 end) as mt
from scan s 
group by s.individual_id;

此查询似乎不需要ids表。

© www.soinside.com 2019 - 2024. All rights reserved.