hive - 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 中实现这一目标的最佳方法是什么?
解决方案
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'