我正在尝试检索一组computer_ids的max(date_entered)。 第一个查询不会返回准确的结果。第二个查询给出了准确的结果,但除非我按特定的computer_id进行过滤,否则基本上会挂起。
我宁愿使用第一个查询
SELECT *, max(reports.date_entered)
FROM reports, hardware_reports
WHERE reports.report_id=hardware_reports.report_id
GROUP BY computer_id;
比第二个查询
SELECT *
FROM reports a
JOIN hardware_reports
ON a.report_id=hardware_reports.report_id
AND a.date_entered = (
SELECT MAX(date_entered)
FROM reports AS b
WHERE a.computer_id = b.computer_id)
and computer_id = 1648;
我需要先优化第二个,或者先获得最大值。
答案 0 :(得分:0)
您可以选择将其加入到获取每computer_ID
的最新记录的子查询中。
SELECT a.*, c.*
FROM reports a
INNER JOIN
(
SELECT computer_ID, MAX(date_entered) date_entered
FROM reports
GROUP BY computer_ID
) b ON a.computer_ID = b.computer_ID
AND a.date_entered = b.date_entered
INNER JOIN hardware_reports c
ON a.report_id = c.report_id
为了提高效率,请在列上提供索引:
ALTER TABLE reports INDEX idx_report_compDate (computer_ID, date_entered)