集計関数の結果を参照することはできません(たとえば、MAX()
)WHERE
同じSELECT
の句 。
このタイプの問題を解決するための規範的なパターンは、次のようなインラインビューを使用することです。
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
JOIN ( SELECT MAX(mx.id) AS max_id
FROM mytable mx
) m
ON m.max_id = t.id
これは、指定された結果を取得するための1つの方法にすぎません。同じ結果を得るには他にもいくつかのアプローチがあり、それらのいくつかは他のアプローチよりもはるかに効率が悪い可能性があります。他の回答はこのアプローチを示しています:
WHERE t.id = (SELECT MAX(id) FROM ... )
場合によっては、最も簡単なアプローチは、LIMITを指定したORDERBYを使用することです。 (この構文はMySQLに固有であることに注意してください)
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
ORDER BY t.id DESC
LIMIT 1
これは1行のみを返すことに注意してください。したがって、同じid値を持つ行が複数ある場合、すべての行が返されるわけではありません。 (最初のクエリは、同じid値を持つすべての行を返します。)
このアプローチを拡張して複数の行を取得できます。LIMIT 5
に変更することで、id値が最も高い5つの行を取得できます。 。
このアプローチのパフォーマンスは、利用可能な適切なインデックス(つまり、id
を使用)に特に依存することに注意してください。 PRIMARY KEYとして、または別のインデックスの先頭の列として。)適切なインデックスは、これらすべてのアプローチを使用したクエリのパフォーマンスを向上させます。