oracle表 分组,并查每组第一条

(用到3个地方:分组列、组内排序列、表名)

oracle:

select t.*
from 
    (
        select a.*, ROW_NUMBER() OVER (PARTITION BY 分组列 ORDER BY 组内排序列 DESC) rn 
        from 表名 a
    ) t 
where t.rn = 1
select t.* from (
    select a.*, ROW_NUMBER() OVER (PARTITION BY 分组列 ORDER BY 组内排序列 DESC) rn_001 
    from 表名 a
) t where t.rn_001 = 1

mysql:

第一种:

先排序,再分组。

SELECT * 
FROM
(
    SELECT * 
    FROM 表名 
    ORDER BY 组内排序列 DESC 
    LIMIT 10000
) a 
GROUP BY 分组列
mysql5.7中,子查询排序默认失效,用limit来恢复排序。
另:
(
   oracle中,select部分出现group by部分,以外的列,会报错,要不就得用聚合函数包裹列。
   mySQL中,默认取了第一条,所以可以这样写。
)

第二种:

先通过聚合函数查出某几列的数据,再自连接查出其他列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值