sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kontrollerer man, om den aktuelle række er den sidst valgte række i en sql-forespørgsel?

  1. Du skal angive ORDER BY at definere en sortering af rækkerne.
  2. Jeg tror, ​​at enhver løsning til MySQL effektivt ville betyde, at din forespørgsel udføres mindst to gange, så det er virkelig bedre at gøre det på klienten.

Hvis du er OK med at køre den samme forespørgsel to gange, så gør noget som dette.

Få ID'et for den sidste række først:

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

Brug dette id i hovedforespørgslen:

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

Som den er, vil den højst sandsynligt gå i stykker, hvis tabellen opdateres, mens disse to forespørgsler kører (det huskede ID bliver muligvis ikke det sidste, hvis rækker tilføjes eller slettes, medmindre du gør noget for at løse dette problem).

Selvfølgelig kan du sætte det hele i én forespørgsel:

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;

Du skal tjekke, om MySQL er smart nok til at køre den indre SELECT LIMIT 1 kun én gang, ellers vil den køre den for hver række i hovedtabellen. Alligevel, selv i det bedste tilfælde udføres forespørgslen effektivt to gange.



  1. Sådan tilføjes en datafil til en SQL Server-database (T-SQL)

  2. Få størrelsen på en database i MariaDB

  3. Kan ikke oprette forbindelse til MySQL og udføre handlinger i Play Framework 2.4

  4. Konvertering af et stort CLOB-objekt til .NET-streng for at sætte ind i en DataGridView-celle