Dit vereist enige aandacht waar de voorwaarde moet worden geplaatst (naar where
of naar on
?) zodat je niet in de maling wordt genomen :-) Je moet de voorwaarde voor t1 toevoegen aan where
clausule en voor t2 tot on
clausule:
SELECT t1.type, t1.name, t1.value
FROM mytable t1
LEFT JOIN mytable t2 ON t1.type = t2.type AND t1.value > t2.value
AND t2.popularity > 3 /* here */
WHERE t2.value IS NULL
AND t1.popularity > 3 /* and here */
Ik heb het niet getest, maar het zou moeten werken.
Poging tot uitleg: de voorwaarde in where-clausule beïnvloedt welke elementen u beschouwt als potentiële elementen met de laagste waarde. Terwijl de voorwaarde in on
clausule beïnvloedt de koppeling:met welke andere elementen wil je het vergelijken? Het definieert de groep waarbinnen je vergelijkt. Technisch gezien heeft het invloed op wanneer t2.* NULL is. Had je de voorwaarde op t2.popularity gegeven aan where
in plaats daarvan ontvangt u geen NULL's (d.w.z. geen elementen met de laagste waarde vinden) voor groepen waar de laagste elementen een lage populariteit hebben.