2

このシナリオでは、個別の computer_id ごとに、その computer_id の report_id が最大である operating_system_version についてレポートしようとしています。

現在、私は以下の結果を得ています:

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 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 rows with Max Value on a Column

于 2013-10-17T03:49:36.153 に答える