두 개의 열이 포함된 각 그룹에서 마지막 레코드를 가져오는 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은 다음 사용자로부터 다음 순서로 메시지를 받았습니다.
- 385
- 421
- 422
- 423
- 424
- 429
- 430
- 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
'programing' 카테고리의 다른 글
| strtok()이 안전하지 않은 것으로 간주되는 이유는 무엇입니까? (0) | 2023.10.29 |
|---|---|
| 모든 열에 대한 Oracle 열 너비 (0) | 2023.10.29 |
| .htaccess rewrite url에 변수 2개 포함 (0) | 2023.10.29 |
| New-Object : "PSCredential" 및 인수 개수 "2"에 대한 오버로드를 찾을 수 없습니다. (0) | 2023.10.29 |
| 아바다 테마에 jQuery 코드를 삽입하는 방법은? (0) | 2023.10.29 |