您需要从一个包含多个表的数据库中查询某个公司的所有产品的最新检测报告。这通常涉及: - 公司表 - 产品表 - 检测报告表 - 可能的关联表
假设有以下表结构:
1. companies
- 公司信息
2. products
- 产品信息,包含公司ID外键
3. test_reports
- 检测报告,包含产品ID外键和报告日期
SELECT p.product_name, r.report_content, r.report_date
FROM products p
JOIN test_reports r ON p.product_id = r.product_id
JOIN companies c ON p.company_id = c.company_id
WHERE c.company_name = '目标公司名称'
AND r.report_date = (
SELECT MAX(report_date)
FROM test_reports
WHERE product_id = p.product_id
)
WITH latest_reports AS (
SELECT
p.product_name,
r.report_content,
r.report_date,
ROW_NUMBER() OVER (PARTITION BY p.product_id ORDER BY r.report_date DESC) as rn
FROM products p
JOIN test_reports r ON p.product_id = r.product_id
JOIN companies c ON p.company_id = c.company_id
WHERE c.company_name = '目标公司名称'
)
SELECT product_name, report_content, report_date
FROM latest_reports
WHERE rn = 1;
SELECT p.product_name, r.report_content, r.report_date
FROM products p
JOIN companies c ON p.company_id = c.company_id
JOIN test_reports r ON p.product_id = r.product_id
LEFT JOIN test_reports r2 ON r.product_id = r2.product_id AND r.report_date < r2.report_date
WHERE c.company_name = '目标公司名称'
AND r2.report_id IS NULL;
索引优化:
company_name
、product_id
和report_date
字段有索引分页处理: 如果数据量大,考虑添加分页:
LIMIT 20 OFFSET 0
缓存结果:
您需要根据实际的数据库结构和业务需求调整上述SQL语句。如果您能提供更具体的表结构信息,我可以给出更精确的查询方案。