Использование структуры данных таблицы (Сообщения):
+------+--------+--------+----------+------+--------+
| id | FromId | ToId | sentdate | text | index |
+------+--------+--------+----------+------+--------+
| guid | 200 | 100 | 3/9/20 | 2c | 6 |
| guid | 400 | 100 | 3/8/20 | 4a | 5 |
| guid | 100 | 200 | 3/8/20 | 2b | 4 |
| guid | 300 | 100 | 3/7/20 | 3a | 3 |
| guid | 200 | 100 | 3/6/20 | 2a | 2 |
| guid | 300 | 200 | 3/5/20 | 1a | 1 |
+------+--------+--------+----------+------+--------+
SELECT *
FROM `Messages`
WHERE FromId IN (
SELECT DISTINCT FromId
FROM `Messages`
WHERE ToId = '100')
GROUP BY FromId ORDER BY index DESC
Ожидаемые результаты должны быть (новейшая запись от каждого отправителя):
+------+--------+--------+----------+------+--------+
| id | fromid | toid | sentdate | text | index |
+------+--------+--------+----------+------+--------+
| guid | 200 | 100 | 3/9/20 | 2c | 6 |
| guid | 400 | 100 | 3/8/20 | 4a | 5 |
| guid | 300 | 100 | 3/7/20 | 3a | 3 |
+------+--------+--------+----------+------+--------+
Однако после выполнения GROUP BY, происходят следующие результаты (неправильная сортировка):
+------+--------+--------+----------+------+--------+
| id | fromid | toid | sentdate | text | index |
+------+--------+--------+----------+------+--------+
| guid | 400 | 100 | 3/8/20 | 4a | 5 |
| guid | 300 | 100 | 3/7/20 | 3a | 3 |
| guid | 200 | 100 | 3/6/20 | 2a | 2 |
+------+--------+--------+----------+------+--------+
Как получить последние записи по-разному от каждого отправителя, оптимизированные без возврата всех записей? Я пробовал JOINs и ORDER BY в подзапросе с одинаковыми результатами.