SELECT cur.textID, cur.fromEmail, cur.subject,
cur.timestamp, cur.read
FROM incomingEmails cur
LEFT JOIN incomingEmails next
on cur.fromEmail = next.fromEmail
and cur.timestamp < next.timestamp
WHERE next.timestamp is null
and cur.toUserID = '$userID'
ORDER BY LOWER(cur.fromEmail)
Basically, you join the table on itself, searching for later rows.
В предложении where вы утверждаете, что не может быть более поздних строк. Это дает вам только последний ряд.
Если может быть несколько писем с одной и той же отметкой времени,
этот запрос нуждается в уточнении. Если в таблице электронной почты есть столбец инкрементного идентификатора,
изменить JOIN как:
LEFT JOIN incomingEmails next
on cur.fromEmail = next.fromEmail
and cur.id < next.id