programing

두 개의 열이 포함된 각 그룹에서 마지막 레코드를 가져오는 MySQL 쿼리

itmemos 2023. 10. 29. 19:03
반응형

두 개의 열이 포함된 각 그룹에서 마지막 레코드를 가져오는 MySQL 쿼리

MySQL(MariaDB) 쿼리를 작성하여 사용자가 메시지를 받은 보낸 사람의 목록을 가져옵니다.Facebook의 받은 편지함에서처럼, 이미 다음과 같은 쿼리를 통해 최근에 보낸 사람이 먼저 나타나길 원합니다.

SELECT  DISTINCT user_id_s
    FROM  messages
    WHERE  id IN (
        SELECT  MAX(id)
            FROM  messages
            WHERE  user_id_r=390
            GROUP BY  user_id_s
                 )
    order by  id DESC 

잘 작동하는 것 같습니다(백만 행과 같은 큰 기록으로 잘 작동할 수 있을지 확신할 수 없습니다?).하지만 진짜 문제는 마지막 메시지가 사용자에 의해 수신되고 마지막 메시지가 회신되지 않은 경우에만 순서대로 불러온다는 것입니다.

예:

사용자 390은 다음 사용자로부터 다음 순서로 메시지를 받았습니다.

  1. 385
  2. 421
  3. 422
  4. 423
  5. 424
  6. 429
  7. 430
  8. 431

따라서 현재 사용자 431은 가장 최근에 목록의 맨 위에 나타나지만, 사용자 390이 사용자 431에게 응답했다면, 마지막 상호 작용을 기반으로 이것이 맨 위에 나타나길 원합니다.

제가 잘 설명해드렸으면 좋겠습니다.

편집: SQL fiddle: http://sqlfiddle.com/ #!9/82417/2

이 예에서는 행 번호 572를 대체하는 행 ID가 '573'으로 맨 위에 표시되어야 하며 나머지 결과는 동일하게 유지되어야 합니다.또한 user_id_s가 있는 두 번째 열은 현재와 마찬가지로 첫 번째 행에 '431'을 부여해야 합니다.

"마지막"의 정의:대신에MAX(id), 당신이 필요합니다

SELECT id
    FROM messages
    WHERE ...
    ORDER BY last_replied DESC
    LIMIT 1

스케일링:그룹 와이즈 맥스 참조.

언급URL : https://stackoverflow.com/questions/40080453/mysql-query-to-fetch-last-record-from-each-group-involving-2-columns

반응형