我有一个如下表
primary_key act_date C1 C2 C3 C4 ...C50
K1 01-12-18
K1 03-12-18
K1 30-12-18
K2 16-11-18
K3 null
K4 null
K4 15-11-18
我想选择所有列和行,以便仅选择与由primary_key分组的max(act_date)相对应的行。如果有两条记录的act_date和value为null,则在act_date列中选择不为null的行。
上表的最终o / p必须如下所示
primary_key act_date C1 C2 C3 C4 ...C50
K1 30-12-18
K2 16-11-18
K3 null
K4 15-11-18
我尝试了以下操作,但是它要求我也将表中的其他列分组,这将再次对每个primary_key重复输出多行,这不是我所需要的。
select a.* from
(select a.*,
max(act_date) over() as max_act_date
from table a) a
where (a.act_date = a.max_act_date)
group by a.primary_key;
赞赏任何反馈/输入
答案 0 :(得分:1)
因此,其clear,primary_key表示唯一字段。在您的示例中primary_key只是column_name。
这是一种方法
select * from(
select *
,row_number() over(partition by t.primary_key order by act_date desc) rnk
from table
)x
where x.rnk=1
答案 1 :(得分:0)
另一种获取最大值的方法。
选择primary_key,max(act_date)作为max_act_date 从表 按primary_key分组;