MySQL从重复的数据里筛选出最大的一条数据

本文讲解如何利用SQL中的max()和groupby解决从重复user_id中获取VIP_code最大值的问题,确保数据的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求:这里要求从重复的user_id里筛选出vip_code最大的唯一 一条数据 , 如下图

 SQL代码:

SELECT
	b.id,b.vip_code,b.user_id,b.price,b.end_date,b.create_time, 

(SELECT reimburse_award FROM t_vip_card WHERE id = b.vip_card_id) AS reimburseAward

FROM t_vip_card_buy_records AS b

JOIN (
	SELECT max(vip_code) AS vip_code, user_id
	FROM t_vip_card_buy_records GROUP BY user_id
) AS a ON b.vip_code = a.vip_code AND b.user_id = a.user_id

WHERE end_date >= CURDATE()

运行效果:

总结:

        这里一定要注意 max( ) 的结果一定是唯一的,比如上面的 end_date 和 create_time 就不是唯一的, 同一个user_id 有多条end_date和create_time相同数据 ,  就只能用另外的方法来实现了

所以,这里用 max(vip_code) 配合 group by user_id 取出每个用户最大的 vip_code 那条数据,而这里每个 user_id 只会有一条 有效的 vip_code 最大的数据, 所以符合上面的写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值