Това изисква известно внимание къде да се постави условието (до where или до on ?), за да не бъдете подведени :-) Трябва да добавите условието за t1 към where клауза и за t2 до on клауза:
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 */
Не съм го тествал, но трябва да работи.
Опит за обяснение: условието in where клаузата засяга кои елементи считате за потенциални елементи с най-ниска стойност. Докато условието в on клаузата засяга връзката:с какви други елементи искате да я сравните? Той определя групата, в която сравнявате. Технически, това оказва влияние върху това кога t2.* ще бъде NULL. Бяхте ли дали условието за t2.popularity на where клауза вместо това, няма да получите никакви NULL (т.е. да не намерите елементи с най-ниска стойност) за групи, където най-ниските елементи имат ниска популярност.