2

在这种情况下,我试图报告每个不同的计算机 ID 的操作系统版本,其中该计算机 ID 的报告 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 的新手。感谢任何帮助。

4

4 回答 4

1

您需要添加一个 group by 语句和一个 having 语句。

group by 看起来像

group by computer_id

看起来像

having report_id= (select max(report_id) )
于 2013-10-17T02:35:26.693 回答
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)
于 2013-10-17T02:37:28.690 回答
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
于 2013-10-17T02:41:31.547 回答
0

需要通过其他帖子做得更好。这个问题在一篇很好的帖子中得到了回答:SQL Select only rows with Max Value on a Column

于 2013-10-17T03:49:36.153 回答