mysql分组筛选数据库_mysql 关联表的筛选分组取最大值

SELECT b2.id bid,b2.`start_date`,b2.`name`,d.* FROM

(

SELECT c.*,MAX(IFNULL(c.sdate,'0')) max_start FROM

(

SELECT a.id,a.`update_time`,b.id bid,b.a_id,b.start_date sdate,b.end_date edate

from agreement a left join bills b

on b.a_id = a.id and b.sell_user_id = a.sell_user_id

where a.sell_user_id = '160000001'

AND a.`status` = 2

AND a.`update_time` >= 1559318400

AND a.`update_time` <= 1567439999

AND IFNULL(b.start_date,'0') < a.end_date

ORDER BY bid DESC

) c GROUP BY c.id

) d LEFT JOIN bills b2 ON d.id = b2.a_id AND b2.start_date = d.max_start

HAVING IFNULL(b2.`start_date`,'0') < FROM_UNIXTIME(d.`update_time`, "%Y-%m-%d");

网上参考了一翻,还是觉得有点差异,

上面的查询语句可以简化为下面的模型:

select b2*,d.*

(

select c.*,MAX(c.date) max_start FROM

(

select * from table_a a left join table_b b on a.aid = b.bid where a.id = '160000001'

) c GROUP BY c.aid

) d left join table_b b2 ON d.id = b2.bid AND b2.date = d.max_start

关联表的分组取最大值的数据库语句

其他知识点:

为空替换为0,否则输出原值

IFNULL(c.sdate,'0')

``

时间戳替换为时间格式

FROM_UNIXTIME(d.update_time, "%Y-%m-%d")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值