Oracle Group By 分组后取最大/小字段值

统计用户回复的信息, 要对其进行过滤, 每个手机号码只取回复的最后一条信息。

每个手机只取一条可以使用GROUP BY 进行分组, 但是怎么取最后回复的呢? 

需要使用 ORACLE 的 KEEP 函数了:

 

(SELECT MAX(MO.***CONTENT)KEEP(dense_rank LAST ORDER BY received_time) ***CONTENT,
                    MAX(MO.RECEIVED_TIME) RECEIVED_TIME,
                    MO.MOBILE_NUMBER,
                    MAX(MO.MO_ID) MO_ID,
                    MAX(mt.reply_content)KEEP(dense_rank LAST ORDER BY sent_time) rn
               FROM S*****O MO
               LEFT JOIN s****mt mt ON mo.mo_id = mt.mo_id
               WHERE mo.received_time >= to_date('2014-08-11','yyyy-mm-dd') AND mo.received_time <= to_date('2014-08-13','yyyy-mm-dd')
              GROUP BY MO.MOBILE_NUMBER)

 

 在 KEEP 内对分组的结果进行排序,dense_rank LAST ORDER BY received_time ,按照received_time排序取得最后一条, 就是最后回复的信息。 如果想取得第一条回复的信息,则用 dense_rank FIRST ORDER BY received_time。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值