sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo verificar si la fila actual es la última fila seleccionada en una consulta sql?

  1. Tienes que especificar ORDER BY para definir alguna ordenación de las filas.
  2. Creo que cualquier solución para MySQL significaría efectivamente que su consulta se ejecuta al menos dos veces, por lo que es mejor hacerlo en el cliente.

Si está de acuerdo con ejecutar la misma consulta dos veces, haga algo como esto.

Obtenga primero el ID de la última fila:

SELECT @LastID := ID 
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;

Utilice ese ID en la consulta principal:

SELECT * 
    , CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID ASC;

Tal como está, lo más probable es que se rompa si la tabla se actualiza mientras se ejecutan estas dos consultas (el ID recordado puede no ser el último si se agregan o eliminan filas, a menos que haga algo para solucionar este problema).

Por supuesto, puede ponerlo todo en una sola consulta:

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;

Debe verificar si MySQL es lo suficientemente inteligente como para ejecutar el SELECT LIMIT 1 interno. solo una vez o lo ejecutará para cada fila de la tabla principal. Aún así, incluso en el mejor de los casos, la consulta se ejecuta dos veces.