Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:如何将结果限制为另一个字段的最大值?_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

MySQL:如何将结果限制为另一个字段的最大值?

MySQL:如何将结果限制为另一个字段的最大值?,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,在这个场景中,我试图报告每个不同计算机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的操作系统版本,其中该计算机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
而是返回每个不同计算机id的最新(最高报告id)操作系统版本,例如:

operating_system_version | computer_id | report_id
10.9 | 1 | 20
10.8 | 2 | 21

我是SQL的新手。。感谢您的帮助。

您需要添加group by语句和having语句

旁边的小组看起来像

group by computer_id
这个房间看起来像

having report_id= (select max(report_id) )

子查询将引导您获得所需的最终结果:

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

需要在查看其他职位时做得更好。这个问题在一篇优秀的帖子中得到了回答:

这个问题很常见。跟随标签寻找许多解决方案。好的,哇。找到了一个很好的帖子:不幸的是,这只返回了一条记录:操作系统版本计算机id最大(r2.report id)10.8 2 21,而不是需要返回的10.9 1 20 10.8 2 21,这是每台计算机id的最高报告id。可能是因为我是n00b,但我得到的是:“where子句”中的未知列“r2.reports_id”
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