Результат поиска с использованием пункта Clause и группирования по и Order By desc - PullRequest
0 голосов
/ 30 апреля 2019

Вот моя структура таблицы

message_id sender_id receiver_id message
-----------------------------------------
   1         2          1         Hi 1
   2         1          2         Hi 2
   3         2          1         Hi 3
   4         1          2         Hi 4
   5         3          1         Hi 5

Это мой запрос

 select * 
 from message 
 where receiver_id = '1' 
 GROUP BY sender_id 
 ORDER BY message_id DESC

Результат:

5 Hi 5
1 Hi 1

Но мой ожидаемый результат -

5 Hi 5
3 Hi 3

Каков фактический запрос?

1 Ответ

0 голосов
/ 30 апреля 2019

В вашей ситуации ниже SQL может обеспечить ваш результат. Но проверьте производительность для больших данных.

MAX вернет 1 строку для каждого сгруппированного значения. Сначала мы получим message_id, после чего мы получим message от запроса на соединение.

SELECT tb1.message_id, 
       tb1.message 
FROM   message tb1 
       INNER JOIN(SELECT Max(message_id) AS mid 
                  FROM   message 
                  WHERE  receiver_id = 1 
                  GROUP  BY sender_id) AS tb2 
               ON tb1.message_id = tb2.mid 

Из документов MySQL:

MySQL расширяет использование GROUP BY, так что список выбора может ссылаться на неагрегированные столбцы, не указанные в предложении GROUP BY. ... Вы можете используйте эту функцию, чтобы получить лучшую производительность, избегая ненужных сортировка и группировка столбцов. Тем не менее, это полезно в первую очередь, когда все значения в каждом неагрегированном столбце, не названном в GROUP BY, то же самое для каждой группы. Сервер может свободно выбирать любое значение из каждая группа, поэтому, если они не совпадают, выбранные значения неопределенный. Кроме того, выбор значений из каждой группы не может быть под влиянием добавления предложения ORDER BY. Сортировка Набор результатов происходит после того, как значения были выбраны, а ORDER BY не влияет на то, какие значения выбирает сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...