sql >> Database >  >> RDS >> Mysql

Hoe te controleren of de huidige rij de laatst geselecteerde rij is in een sql-query?

  1. U moet ORDER BY opgeven om een ​​sortering van de rijen te definiëren.
  2. Ik geloof dat elke oplossing voor MySQL in feite zou betekenen dat je query minstens twee keer wordt uitgevoerd, dus het is echt beter om het op de client te doen.

Als je het goed vindt om dezelfde query twee keer uit te voeren, doe dan iets als dit.

Haal eerst de ID van de laatste rij op:

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

Gebruik die ID in de hoofdquery:

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

Zoals het is, zal het hoogstwaarschijnlijk breken als de tabel wordt bijgewerkt terwijl deze twee query's worden uitgevoerd (de onthouden ID wordt mogelijk niet de laatste als rijen worden toegevoegd of verwijderd, tenzij u iets doet om dit probleem op te lossen).

Je kunt het natuurlijk allemaal in één zoekopdracht stoppen:

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;

U moet controleren of MySQL slim genoeg is om de innerlijke SELECT LIMIT 1 . uit te voeren slechts één keer of het zal het voor elke rij van de hoofdtabel uitvoeren. Maar zelfs in het beste geval wordt de query effectief twee keer uitgevoerd.



  1. IntegrityError:onderscheid maken tussen unieke beperking en niet-nulschendingen

  2. Vervangingen gebruiken met een onbewerkte Sequelize-query:enkele aanhalingstekens vermijden?

  3. mysql bestel varchar-veld als geheel getal

  4. Uitvoer krijgen van dbms_output.get_lines met behulp van JDBC