sql >> Databasteknik >  >> RDS >> Mysql

Hur kontrollerar man om den aktuella raden är den senast valda raden i en sql-fråga?

  1. Du måste ange ORDER BY för att definiera någon sortering av raderna.
  2. Jag tror att alla lösningar för MySQL i praktiken skulle innebära att din fråga körs minst två gånger, så det är verkligen bättre att göra det på klienten.

Om du är okej med att köra samma fråga två gånger, gör något så här.

Få ID:t för den sista raden först:

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

Använd det ID:t i huvudfrågan:

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

Som den är, kommer den troligen att gå sönder om tabellen uppdateras medan dessa två frågor körs (det ihågkomna ID:t kanske inte blir det sista om rader läggs till eller tas bort, om du inte gör något för att lösa problemet).

Naturligtvis kan du lägga allt i en fråga:

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 måste kontrollera om MySQL är smart nog att köra den inre SELECT LIMIT 1 bara en gång, annars körs den för varje rad i huvudtabellen. Ändå, även i bästa fall exekveras frågan effektivt två gånger.



  1. gem installera mysql misslyckas

  2. Bygga ett tabellberoendediagram med en rekursiv fråga

  3. #1273 – Okänd sortering:'utf8mb4_unicode_520_ci'

  4. Hur använder man Timestamp_to_scn och Scn_to_timestamp i Oracle?