mysql 分组取每组按条件排序后的第一条记录

查询每个项目下的按房间号排序的第一个房间

room表通过project_id字段与project表关联

MySQL8.0

# ROW_NUMBER() 函数mysql8才支持
select * from (
    select 
    ROW_NUMBER()over(partition by p.id order by r.number ASC) rowId,
    p.id,
    p.`name`,
    r.id room_id,
    r.number
    from project p
    inner join room r on r.project_id=p.id
) where rowId=1;

MySQL5.7

select * from
(select a.*, @rowId:= CASE WHEN @pid = a.project_id THEN @rowId+ 1 ELSE 1 END AS rowId,
@pid:= a.project_id as pid
from 
(select 
    p.id project_id,
    p.`name`,
    r.id room_id,
    r.number
    from project p
    inner join room r on r.project_id=p.id
    order by p.id,r.number ASC) a
)aa where rowId=1;

PS : 也可以改成前几条数据(rowId<=5,取前5条)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值