We kunnen niet verwijzen naar het resultaat van een aggregatiefunctie (bijvoorbeeld MAX()
) in een WHERE
clausule van dezelfde SELECT
.
Het normatieve patroon voor het oplossen van dit soort problemen is het gebruik van een inline-weergave, zoiets als dit:
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
JOIN ( SELECT MAX(mx.id) AS max_id
FROM mytable mx
) m
ON m.max_id = t.id
Dit is slechts één manier om het gespecificeerde resultaat te krijgen. Er zijn verschillende andere benaderingen om hetzelfde resultaat te krijgen, en sommige daarvan kunnen veel minder efficiënt zijn dan andere. Andere antwoorden demonstreren deze aanpak:
WHERE t.id = (SELECT MAX(id) FROM ... )
Soms is de eenvoudigste benadering het gebruik van een ORDER BY met een LIMIT. (Merk op dat deze syntaxis specifiek is voor MySQL)
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
ORDER BY t.id DESC
LIMIT 1
Merk op dat dit slechts één rij retourneert; dus als er meer dan één rij is met dezelfde id-waarde, worden ze niet allemaal geretourneerd. (De eerste zoekopdracht retourneert ALLE rijen met dezelfde ID-waarde.)
Deze aanpak kan worden uitgebreid om meer dan één rij te krijgen. U kunt de vijf rijen met de hoogste id-waarden krijgen door deze te wijzigen in LIMIT 5
.
Merk op dat de prestatie van deze aanpak in het bijzonder afhankelijk is van de beschikbaarheid van een geschikte index (d.w.z. met id
als de PRIMAIRE SLEUTEL of als de leidende kolom in een andere index.) Een geschikte index zal de prestaties van zoekopdrachten verbeteren met al deze benaderingen.