hive 如何根据另一列的结果查询每一行的值?

xfyts7mz  于 2022-11-23  发布在  Hive
关注(0)|答案(1)|浏览(155)

因此,我有一个数据库,每个客户端都有一个唯一的ID,每天这个数据库都会更新客户端的“建议”。
我的问题是,我需要获取最新批准方案的ID、结果和日期,否则,如果客户在给定时间间隔内没有批准的方案,则需要获取该客户的最新报告(该时间间隔对我来说不是问题)Sample
Expected result
我使用ROW_NUMBER()OVER(PARTITION BY id ORDER BY date DESC)来获取最新的建议,但使用我解释过的条件无法使其工作

kmynzznz

kmynzznz1#

第一步:

  • 基于两个结果(即基于ID和结果值的批准和重新批准)创建等级。
  • rank_ = 1上筛选,这将提取两个结果值的最近值(如果存在)
  • 为两个结果值提取每个ID的最新日期后,创建一个计数以检查一个ID是否具有多行
  • 创建一个布尔值以过滤掉不相关的行
with main as (
select 
*, row_number (over partition by id, result order by date desc) as rank_
from table
),
totals as (
select *, count(*) over(partition by id) as total_results
 from main where rank_ = 1
),
conditions as (
select 
case 
when total_results = 1 then true
when total_results > 1 and lower(result) = 'approved' then true
else false end as is_relevant_row
from totals
)
select * from conditions where is_relevant_row

相关问题