Ты же понимаешь, что CTE может вернуть десяток записей с dm_rank = 1? тут нужно применять ROW_NUMBER() и расширять сортировку до обеспечения уникальности записи.
Это даже если не нудеть о том, что вот никакое ограничение в структуре не мешает d.date_latest_message не соответствовать максимальному DM.added_date.
Да ладно! легко эмулируется на коррелированном группирующем подзапросе.
Но столбец "category" находится в другой строке базы.