Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como verificar se a linha atual é a última linha selecionada em uma consulta sql?

  1. Você precisa especificar ORDER BY para definir alguma classificação das linhas.
  2. Acredito que qualquer solução para MySQL significaria efetivamente que sua consulta seria executada pelo menos duas vezes, então é realmente melhor fazê-lo no cliente.

Se você estiver OK em executar a mesma consulta duas vezes, faça algo assim.

Obtenha o ID da última linha primeiro:
SELECT @LastID := ID 
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;

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

Como está, provavelmente ele será interrompido se a tabela for atualizada enquanto essas duas consultas forem executadas (o ID lembrado pode não se tornar o último se as linhas forem adicionadas ou excluídas, a menos que você faça algo para resolver esse problema).

Claro, você pode colocar tudo em uma 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;

Você precisa verificar se o MySQL é inteligente o suficiente para executar o SELECT LIMIT 1 interno apenas uma vez ou irá executá-lo para cada linha da tabela principal. Ainda assim, mesmo no melhor caso, a consulta é efetivamente executada duas vezes.