Как сгруппировать по полю, затем заказать по другому полю, а затем ограничить - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть запрос вроде:

SELECT _threads.*, _messages.*
FROM _threads
LEFT JOIN _messages
ON _threads.thread_id = _messages.message_thread_id
WHERE _threads.thread_servicer_id = 'jG5s2b6TRs'
GROUP BY _threads.thread_customer_id

Что возвращает что-то вроде: enter image description here

Как я могу изменить запрос, чтобы иметь возможность группировать по thread_customer_id ТО затем по message_time и выбирать только строку с самой последней message_time.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Предварительно запросите темы / сообщения, сгруппированные по клиенту, и получите максимальное время публикации для вашего фильтра ID обслуживающего устройства.От этого он вернет одного клиента / datetime.ТО, присоедините его обратно к таблице сообщений СНОВА, но только для сопоставленной даты / времени, затем к потоку, который соответствует вашему идентификатору обслуживающего устройства ... на случай, если маловероятно, что отправка нескольких сообщений с одинаковой датой / временем вразные серверы

SELECT 
      T2.*, 
      M2.*
   FROM
      ( select T.thread_Customer_id,
               MAX( M.Message_Time ) as LatestPost
           from
              _Threads T
                 JOIN _Messages M
                    ON T.Thread_ID = M.Message_Thread_ID
           where
              T.thread_servicer_id = 'jG5s2b6TRs'
           GROUP BY 
              T.thread_customer_id ) PreMax

      JOIN _Messages M2
         on PreMax.LatestPost = M2.Message_Time

         JOIN _Threads T2
            on M2.Message_Thread_ID = T2.Thread_ID
           AND T2.Thread_Customer_ID = PreMax.Thread_Customer_ID
           AND T2.Thread_Servicer_ID = 'jG5s2b6TRs'

   ORDER BY 
      M2.Message_Time DESC
1 голос
/ 15 декабря 2011

Из дополнительной информации в ваших комментариях я думаю, что это даст желаемый результат

SELECT t.*, m.*, MAX(m.message_time)
FROM _threads t
INNER JOIN _messages m
ON t.thread_id = m.message_thread_id
WHERE t.thread_servicer_id = 'jG5s2b6TRs'
GROUP BY t.thread_customer_id
ORDER BY m.message_time
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...