-
ORDER BY
を指定する必要があります 行の並べ替えを定義します。 - MySQLのソリューションは、クエリが少なくとも2回実行されることを効果的に意味すると思います。したがって、クライアントで実行する方が非常に優れています。
同じクエリを2回実行しても問題がない場合は、次のようにします。
最初に最後の行のIDを取得します:
SELECT @LastID := ID
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;
メインクエリでそのIDを使用します:
SELECT *
, CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID ASC;
現状では、これら2つのクエリの実行中にテーブルが更新されると、破損する可能性があります(この問題に対処するために何かを行わない限り、行が追加または削除された場合、記憶されたIDが最後のIDにならない可能性があります)。
もちろん、すべてを1つのクエリにまとめることができます:
SELECT
*,
CASE WHEN ID = LastID THEN FALSE ELSE TRUE END AS IsLast
FROM
YourTable
CROSS JOIN
(
SELECT ID AS LastID
FROM YourTable
ORDER BY ID DESC
LIMIT 1
) AS TableLastID
ORDER BY ID ASC;
MySQLが内部のSELECT LIMIT 1
を実行するのに十分スマートであるかどうかを確認する必要があります 一度だけ、またはメインテーブルのすべての行に対して実行されます。それでも、最良の場合でも、クエリは効果的に2回実行されます。