Dette kræver en vis opmærksomhed, hvor betingelsen skal placeres (til where
eller til on
?) så du ikke bliver snydt :-) Du skal tilføje betingelsen for t1 til where
klausul og for t2 til on
klausul:
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 */
Har ikke testet det, men det burde virke.
Forsøg på en forklaring: betingelsen i hvor-klausulen påvirker hvilke elementer du betragter som potentielle elementer med lavest værdi. Mens betingelsen i on
klausul påvirker koblingen:med hvilke andre elementer vil du sammenligne det? Det definerer den gruppe, du sammenligner inden for. Teknisk set har det indflydelse på, hvornår t2.* bliver NULL. Havde du givet betingelsen om t2.popularitet til where
i stedet vil du ikke modtage nogen NULL'er (dvs. ikke finde elementer med laveste værdi) for grupper, hvor de laveste elementer har lav popularitet.