在排序后从组中选择第一行

6rqinv9w  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(332)

我的table是这样的:

appl_db_srvr_xref_id  secrty_ctl_id assmt_dt  cmdb_id  secrty_ctl_elemnt_impmtn_cd
       180                 43       1/1/2018    227         N 
       180                 43       9/31/2018   227         Y
       179                 28       1/1/2018    710         N
       179                 29       2/2/2018    710         N
       179                 43       3/3/2018    710         N

我需要的是按日期排序(appl\u db\u srvr\u xref\u id、secrty\u ctl\u id和cmdb\u id)分组,并返回最新的行。所以在这个例子中,我想返回:

180   43   227   Y
179   28   710   N
179   29   710   N
179   43   710   N

我尝试的是:

SELECT secrty_ctl_id, 
       appl_db_srvr_xref_id, 
       cmdb_id, 
       assmt_dt 
 FROM tablename 
 GROUP BY 
       secrty_ctl_id, 
       appl_db_srvr_xref_id, 
       cmdb_id 
 ORDER BY assmt_dt desc
ua4mk5z4

ua4mk5z41#

使用行数()分析函数:

select
       secrty_ctl_id, 
       appl_db_srvr_xref_id, 
       cmdb_id, 
       assmt_dt
from
(
SELECT secrty_ctl_id, 
       appl_db_srvr_xref_id, 
       cmdb_id, 
       assmt_dt,
       row_number() over (partition by appl_db_srvr_xref_id, secrty_ctl_id, cmdb_id order by assmt_dt desc) rn
 FROM tablename 
 )s
where rn=1;

相关问题