多实例重复ID的SQL表关联:获取最新日期与最低成本
嘿,刚接触子查询和表关联遇到这种问题很正常,我来给你捋清楚怎么写这条SQL!
首先得明确:两张表肯定得有一个共同的关联字段(比如商品ID、业务ID这类,我下面假设是business_id,你记得换成你实际用的字段名),不然没法把日期和成本对应起来。
你的需求是从重复的归档数据里,拿到每条业务数据的最新日期(来自tableA)和对应最低成本,这里分两种常见情况,我都给你写出来:
情况1:每个业务数据的最新日期 + 该业务的最低成本(不限日期)
这种是不管成本的记录日期,只要是该业务的最低成本,搭配它的最新日期:
SELECT a.business_id, a.latest_date, b.min_cost FROM ( -- 先从tableA分组,拿到每个业务的最新日期 SELECT business_id, MAX(date_column) AS latest_date FROM tableA GROUP BY business_id ) a -- 关联tableB分组后的最低成本数据 JOIN ( SELECT business_id, MIN(cost_column) AS min_cost FROM tableB GROUP BY business_id ) b ON a.business_id = b.business_id;
情况2:每个业务数据的最新日期 + 该日期下的最低成本
如果是要最新日期当天对应的成本记录里的最低值,就用这个:
SELECT a.business_id, a.latest_date, MIN(b.cost_column) AS lowest_cost_on_latest_date FROM ( -- 先拿每个业务的最新日期 SELECT business_id, MAX(date_column) AS latest_date FROM tableA GROUP BY business_id ) a -- 关联tableB中同业务且日期等于最新日期的记录 JOIN tableB b ON a.business_id = b.business_id AND b.date_column = a.latest_date GROUP BY a.business_id, a.latest_date;
你之前查询返回0条结果,大概率是这几个原因:
- 关联字段选错了(比如用了表的自增ID而不是共同的业务键)
- 两张表的关联字段没有匹配的数据(比如tableA有的业务ID在tableB里找不到)
- 字段名写错了(比如把
date写成dates,或者成本字段名拼错)
记得把SQL里的business_id、date_column、cost_column都换成你实际的表字段名哦!
内容的提问来源于stack exchange,提问作者mezzomix
相关产品推荐
相关产品推荐

