Wymaga to trochę uwagi, gdzie umieścić warunek (do where
lub do on
?) żeby nie dać się oszukać :-) Musisz dodać warunek dla t1 do where
klauzula i dla t2 na on
klauzula:
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 */
Nie testowałem tego, ale powinno działać.
Próba wyjaśnienia: warunek, w którym klauzula WHERE wpływa na elementy, które uważasz za potencjalne elementy o najniższej wartości. Natomiast warunek w on
klauzula wpływa na powiązanie:z jakimi innymi elementami chcesz ją porównać? Definiuje grupę, w której porównujesz. Z technicznego punktu widzenia ma to wpływ na to, kiedy t2.* będzie NULL. Czy podałeś warunek na t2.popularity na where
zamiast tego nie otrzymasz żadnych wartości NULL (tj. nie znajdziesz elementów o najniższej wartości) dla grup, w których najniższe elementy mają niską popularność.