首页 > 解决方案 > HIVEQL 为给定客户选择所有账户,该客户至少拥有一个满足特定条件的账户

问题描述

所以我有一个包含信用卡账户的大型数据集。一个客户可以有多个信用卡账户。所以帐户是唯一的,客户肯定不是唯一的(客户“1234”可以有 5 个帐户)。如果任何帐户满足特定要求,我想选择客户的整个帐户列表。该要求正在查看其最后一个循环日期(帐户最后一次循环的时间)。那么让我们看看这个数据集......

account|customer|last_cycle_dt
4839|1|20190114
9522|1|20190103
1195|1|20181227
5461|2|20190112
1178|2|20190108
2229|2|20181218
8723|3|20181227
5692|3|20181227
0392|4|20190113
1847|5|20190113
0389|5|20190112
3281|5|20190101
2008|5|20181222
3948|5|20181216

因此,我以一种更容易查看的特定方式对这些数据进行了排序。事实上,也许需要以这种方式对数据进行排序以进行提取(最有效),但我不确定。

因此,我们摘录中的标准将选择至少有 1 个帐户的所有客户帐户,其 last_cyc_dt 字段大于 20180112

所以... 我们将选择所有客户 1 个帐户 我们将选择无客户 2 个帐户 我们将选择无客户 3 个帐户 我们将选择所有客户 4 个帐户 我们将选择所有客户 5 个帐户

因为该客户的最后一个周期日期大于 20180112 至少存在 1 个帐户

在 HIVE 中实现这一目标的最佳方法是什么?

标签: hivehiveql

解决方案


max用作窗口函数,获取每个的最新 last_cycl_dt并customer检查它是否大于所需日期。

select account,customer,last_cycl_dt
from (select t.*,max(last_cycle_dt) over(partition by customer) as latest_last_cycl_dt
      from tbl t
     ) t
where latest_last_cycl_dt > '20180112'

推荐阅读