要获取特定公司下所有产品的最新检测报告,通常需要涉及以下几个表: 1. 公司表(companies) 2. 产品表(products) 3. 检测报告表(inspection_reports)
SELECT
p.product_id,
p.product_name,
r.report_id,
r.report_date,
r.report_content
FROM
products p
JOIN
companies c ON p.company_id = c.company_id
JOIN
inspection_reports r ON p.product_id = r.product_id
WHERE
c.company_name = '目标公司名称'
AND r.report_date = (
SELECT MAX(report_date)
FROM inspection_reports
WHERE product_id = p.product_id
);
WITH LatestReports AS (
SELECT
r.*,
ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY report_date DESC) as rn
FROM
inspection_reports r
)
SELECT
p.product_id,
p.product_name,
lr.report_id,
lr.report_date,
lr.report_content
FROM
products p
JOIN
companies c ON p.company_id = c.company_id
JOIN
LatestReports lr ON p.product_id = lr.product_id AND lr.rn = 1
WHERE
c.company_name = '目标公司名称';
SELECT
p.product_id,
p.product_name,
r.report_id,
r.report_date,
r.report_content
FROM
products p
JOIN
companies c ON p.company_id = c.company_id
LEFT JOIN
inspection_reports r ON p.product_id = r.product_id
LEFT JOIN
inspection_reports r_newer ON p.product_id = r_newer.product_id
AND r_newer.report_date > r.report_date
WHERE
c.company_name = '目标公司名称'
AND r_newer.report_id IS NULL
AND r.report_id IS NOT NULL;
确保相关表上有适当的索引:
对于大数据量,方案二(窗口函数)通常性能最好
如果只需要部分字段,避免使用SELECT *,只查询必要的字段
希望这些方案能帮助您解决问题。根据您的具体数据库结构和数据量,可以选择最适合的方案。