您的位置:首页 > 数据库

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

2015-07-22 00:00 330 查看
摘要: 按照分组条件group by后,每组中可能有多条数据,现要求每组只取一条数据,如创建时间最新的那条。Oracle数据库可以利用分析函数row_number()、over()实现,也可以通过普通sql语句实现。

数据库表结构:



其中主键字段为: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
)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息