hive - 从蜂巢中的表中获取最新的 2 条记录
问题描述
团队,我在这里有一个场景。我需要通过 Hql 选择 2 条最新记录。
我已经尝试了 rownumber,但似乎没有得到预期的输出
Select
A.emp_ref_i,
A.last_updt_d,
A.start_date,
case when A.Last_updt_d=max(A.Last_updt_d) over (partition by A.emp_ref_i)
and A.start_date=max(a.start_date) over (partition by A.emp_ref_i)
then 'Y' else 'N' end as Valid_f,
a.CHANGE
from
(
select
distinct(emp_ref_i),
last_updt_d,
start_date,
CHANGE
from
PR) A
目前获得输出为
EMP_REF_I LAST_UPDT_D start_date Valid_f CHANGE
1 123 3/29/2020 2/3/2019 Y CHG3
2 123 3/30/2019 2/4/2018 N CHG2
3 123 3/29/2019 2/4/2018 N CHG1
but required:
EMP_REF_I LAST_UPDT_D start_date Valid_f CHANGE
1 123 3/29/2020 2/3/2019 Y CHG3
2 123 3/30/2019 2/4/2018 N CHG2
解决方案
使用row_number
和过滤:
select s.emp_ref_i,
s.last_updt_d,
s.start_date,
case when rn=1 then 'Y' else 'N' end Valid_f,
s.change
from
(
Select
A.*,
row_number() over(partition by A.emp_ref_i order by a.Last_updt_d desc, a.start_date desc) rn
from (...) A
)s
where rn<=2;
推荐阅读
- reporting-services - SSRS 比较两个不同文本框中的值行。
- unreal-engine4 - 为什么在使用“for循环”和“选择节点”时“从类中生成演员”不执行多次
- java - Java中是否有strpbrk等价物?以及如何使用它?
- kubernetes - 节点与互联网完全隔离
- ibm-cloud - 提供 $timezone 上下文变量不会改变 Watson Assistant 中的 now() 行为
- uitableview - 在 UITableView 中加载数据时,活动指示器出现问题
- mysql - 从 3 个不同的表创建一个视图
- apache - 配置 apache 以将 url 重定向到另一个主机
- linux - 使用 DSA 公钥验证 X509 证书签名
- batch-file - 批量重命名文件,同时保留部分 rar 编号