在这种情况下,我尝试报告每个不同的computer_id的operating_system_version,其中该computer_id的report_id是最大的。
目前,我得到以下结果:
operating_system_version | computer_id | report_id
10.8 | 1 | 10
10.9 | 1 | 20
10.9 | 2 | 11
10.8 | 2 | 21
以上内容由本声明返回:
SELECT operating_systems.operating_system_version,
reports.computer_id,
reports.report_id
FROM operating_systems
INNER JOIN reports
ON operating_systems.report_id = reports.computer_id
相反,想为每个不同的computer_id返回最新的(最高的report_id)operating_system_version,例如:
operating_system_version | computer_id | report_id
10.9 | 1 | 20
10.8 | 2 | 21
我是SQL新手。感谢任何帮助。
答案 0 :(得分:1)
您需要添加group by语句和having语句。
小组by看起来像
group by computer_id
看起来像是
having report_id= (select max(report_id) )
答案 1 :(得分:0)
SELECT operating_systems.operating_system_version,
reports.computer_id,
reports.report_id
FROM operating_systems INNER JOIN reports ON operating_systems.report_id = reports.computer_id
WHERE NOT EXISTS (SELECT 1
FROM reports r2
WHERE r2.computer_id = reports.computer_id
AND r2.reports_id > reports.reports_id)
答案 2 :(得分:0)
子查询会引导您达到预期的最终结果:
SELECT os.operating_system_version,
r2.computer_id,
MAX(r2.report_id)
FROM (
SELECT DISTINCT computer_id
FROM reports
) r
INNER JOIN operating_systems os
ON os.report_id = r.computer_id
INNER JOIN reports r2
ON r2.computer_id = r.computer_id
答案 3 :(得分:0)
需要通过其他帖子做得更好。这个问题在一篇很好的文章中得到了回答:SQL Select only rows with Max Value on a Column