两张表一对多,取最新的一条

两张表一对多,关联取最新的一条记录

表A: s_price_scheme 存储的是方案表

表B:s_site_reserve 是场地表,

表A和表B是一对多关系

SELECT
	sps.id,
	cc.created_time,
	cc.id AS id2 ,sps.scheme_id
FROM
	s_price_scheme sps
left 	JOIN (
	SELECT
		a.id,
		a.price_scheme_id,
		a.created_time 
	FROM
		s_site_reserve AS a
		LEFT JOIN ( SELECT MAX( id ) AS id, price_scheme_id FROM s_site_reserve GROUP BY price_scheme_id ) AS b ON a.price_scheme_id = b.price_scheme_id 
	WHERE
		a.id = b.id 
	) AS cc ON sps.id = cc.price_scheme_id

通过MAX()函数查询分组前数id最大最新的一条数据,因为group by 执行顺序在order by 之前

SELECT
		a.id,
		a.price_scheme_id,
		a.created_time 
	FROM
		s_site_reserve AS a
		LEFT JOIN ( SELECT MAX( id ) AS id, price_scheme_id FROM s_site_reserve GROUP BY price_scheme_id ) AS b ON a.price_scheme_id = b.price_scheme_id 
	WHERE
		a.id = b.id 

MAX()函数:对字母进行大小判断,返回最大的字符或者字符串值

MAX() 函数还可以返回任意列中的最大值,包括返回字符类型的最大值。在对字符类型的数据进行比较时,按照字符的 ASCII码值大小进行比较,从 a~z,a 的 ASCII 码最小,z 的最大。在比较时,先比较第一个字符,如果相等,继续比较下一个字符,一直到两个字符不相等或者字符结束为止。

Mysql的执行顺序

1.from   查询表
2.join     关联表
3.on      关联判断
4.where 	  执行条件判断
5.group by    分组
6.avg,sum.... 	求和
7.having 		分组执行条件判断
8.select 			查询字段
9.distinct 		去重
10.order by		排序
11.limit 		截断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值