SQL取分组后每组中的一条特定记录

数据库表结构:

SQL取分组后每组中的一条特定记录_第1张图片

其中主键字段为:flight_month、carrier、ticket_type、created_dt(创建时间);

flight_month、carrier、ticket_type分组,每组中取创建时间最新的一条数据;

Oracle数据库可以用如下sql:

select * from(
  select t.*,row_number() 
  over(partition by t.flight_month,carrier,ticket_type order by t.created_dt desc) rn
  from SA_AGENT_FEE_MON_OTHER t)
where rn = 1

普通的sql语句也可以,用exists子句实现:

select * from SA_AGENT_FEE_MON_OTHER t1
where not exists(
     select * from SA_AGENT_FEE_MON_OTHER t2
     where t1.flight_month = t2.flight_month
     and t1.carrier = t2.carrier
     and t1.ticket_type = t2.ticket_type
     and t1.created_dt < t2.created_dt
)


你可能感兴趣的:(数据库,exists,row_number(),over())