MySql实现row_number() over(partition by)

1,MySql5.7版本 

SELECT * FROM
(
SELECT a.*,
@rn:= CASE WHEN @securityid = sxbelecid THEN @rn + 1 ELSE 1 END AS rn,
@securityid:= sxbelecid as sxbelecidf

FROM
(SELECT * from table WHERE nowtime >= '2020-02-01 00:00:00'
AND nowtime <= '2020-02-01 01:00:00'  ORDER BY sxbelecid, nowtime DESC) a
,(SELECT @rn=0, @securityid=0) b
)a WHERE rn =1

说明:sxbelecid是根据这个字段分组,nowtime是根据这个字段排序 ,rn是取每个sxbelecid的最新的一条记录

2,MySQL5.7以下版本

select * from (select H.id,H.time,H.number,H.sex,H.user_id,@rownum:=@rownum+1 rownum,
if(@pdept=H.user_id,@rank:=@rank+1,@rank:=1) as rank,
@pdept:=H.user_id
from (
select id,time,number,sex,user_id from test order by time desc
) H ,(select @rownum :=0 , @pdept := null ,@rank:=0) a) t WHERE rank=1

说明:user_id是根据这个字段分组,time是根据这个字段排序,rank等于1是取每个user_id的最新的一条记录

参考:http://www.manongjc.com/detail/15-olzniivkfsodftm.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值