MYSQL搜索多个对象的数据,合并重复,并只取第一条,解决办法

低版本:row_number() over partition by 分组聚合函数不能用
如果版本高可以直接用:

select * ,row_number() over (partition by c_id order by s_score) from score;

现在来说说SQL该怎么写:
第一种:

SELECT
	t1.* 
FROM
	(
	SELECT
		wh.id,
		wh.ywid,
		wh.ywlx,
		wh.jmxm,
		wh.jmsfzh,
		wh.xxzt,
		wh.cjsj,
		hd.whjg,
		hd.whzt,
		hd.lydz,
		hd.lysc,
		hd.bdzt,
		hd.bdhtnr,
		hd.shzt 
	FROM
		xx_jl_aiwh wh
		LEFT JOIN xx_jl_aihd hd ON hd.id = wh.id 
	WHERE
		wh.jmsfzh IN ( '330624194908035333' ) 
		AND wh.ywlx = 3 
	) t1 
WHERE
	( SELECT count( 1 ) FROM xx_jl_aiwh t2 WHERE t1.jmsfzh = t2.jmsfzh AND t2.cjsj >= t1.cjsj )<= 1;

原理:取出第一个查询出来的所有数据 t1 与 第二个查询 t2 进行联合查询,主要是 <= 1 这个关键点,这个sql语句会把 t1 中的每一条数据都拿来执行 t2 这个查询,判断对应的数量是不是 <=1【肯定只有最大的时间点才会 = 1】,因此就可以得到一个 合并重复,并只取最大时间的数据集合。【具体需求看你自己】

第二种:

SELECT t1.* FROM xx_jl_aihd t1,( SELECT jmsfzh, max( cjsj ) AS maxcjsj FROM xx_jl_aihd GROUP BY jmsfzh ) t2 
WHERE
	t1.jmsfzh = t2.jmsfzh 
	AND t1.cjsj = t2.maxcjsj;

原理:这个就比较好理解了,先查出最大的时间点,然后再根据这些时间查出对应数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值