如何在多表查询中获取某个公司的最新检测报告?
在多表查询中,我们需要考虑如何从不同表中提取相关数据。考虑以下场景:
有两张表,分别存储产品信息(pro)和检测信息(procheck),其中 procheck 中的 pro_id 与 pro 中的 id 关联,每个产品可能对应多个检测信息记录。
现在我们要查询某个特定公司(company_id)生产的所有产品的最新一次检测报告。虽然可以使用类似以下的查询,但它会返回所有检测报告:
select `pro`.`id`,`pro`.`pm`,`pro`.`company_id`,procheck.id as procheck__id,procheck.pro_id as procheck__pro_id,procheck.checkdate as procheck__checkdate from `da_pro` `pro` left join `da_procheck` `procheck` on `pro`.`id`=`procheck`.`pro_id` where `pro`.`company_id` = 487
登录后复制
为了获取最新的检测报告,我们需要进一步筛选信息。首先,我们需要查询 procheck 表中的每个产品的最新 checkdate:
select pro_id, max(checkdate) as max_checkdate from procheck group by pro_id
登录后复制
然后,我们将此结果与初始查询的表(称为 t1)进行连接,并使用 procheck__pro_id 和 procheck__checkdate 进行匹配。最终的查询如下:
SELECT t1.* FROM t1 JOIN ( SELECT pro_id, MAX(checkdate) AS max_checkdate FROM procheck GROUP BY pro_id ) t2 ON t1.procheck__pro_id = t2.pro_id AND t1.procheck__checkdate = t2.max_checkdate;
登录后复制
这样就能得到某个特定公司生产的所有产品的最新一次检测报告。