GROUP BY를 사용하여 각 그룹의 최신 레코드를 얻는 방법은 무엇입니까?
예를 들어 테이블이 있다고 칩시다messages
열 포함:
id | from_id | to_id | subject | message | timestamp
실제 스레드를 드릴다운하기 전에 Facebook 수신 트레이에서 볼 수 있는 것처럼 각 사용자로부터만 최신 메시지를 받고 싶습니다.
이 쿼리를 통해 필요한 결과를 얻을 수 있을 것 같습니다.
SELECT * FROM messages GROUP BY from_id
그러나 쿼리는 각 사용자로부터 최신이 아닌 가장 오래된 메시지를 받고 있습니다.
이건 이해할 수 없어요.
마지막으로 알아봐야지timestamp
각 그룹(서브쿼리)의 값을 지정한 후 이 서브쿼리를 테이블에 결합합니다.
SELECT t1.* FROM messages t1
JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2
ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
이거 드셔보세요
SELECT * FROM messages where id in (SELECT max(id) FROM messages GROUP BY from_id ) order by id desc
이 쿼리는 모든 Form_id에 대해 마지막 레코드를 반환합니다.
SELECT m1.*
FROM messages m1 LEFT JOIN messages m2
ON (m1.Form_id = m2.Form_id AND m1.id < m2.id)
WHERE m2.id IS NULL;
Devart가 말한 내용을 보완하기 위해 아래 코드는 질문에 따라 주문하지 않습니다.
SELECT t1.* FROM messages t1
JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2
ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
"GROUP BY" 절이 메인 쿼리에 있어야 합니다. 먼저 "SOURCE"를 재정렬하여 필요한 "GROUP BY"를 가져와야 하기 때문입니다.
SELECT t1.* FROM messages t1
JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages ORDER BY timestamp DESC) t2
ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp GROUP BY t2.timestamp;
안부 전해요,
이것은 표준적인 문제입니다.
MySQL에서는 GROUP BY 절에서 열을 생략할 수 있지만 표준 SQL에서는 생략할 수 없지만 MySQL 기능을 사용할 때 일반적으로 결정론적 결과를 얻을 수 없습니다.
SELECT *
FROM Messages AS M
JOIN (SELECT To_ID, From_ID, MAX(TimeStamp) AS Most_Recent
FROM Messages
WHERE To_ID = 12345678
GROUP BY From_ID
) AS R
ON R.To_ID = M.To_ID AND R.From_ID = M.From_ID AND R.Most_Recent = M.TimeStamp
WHERE M.To_ID = 12345678
필터가 추가되어 있습니다.To_ID
당신이 가질 수 있는 것과 일치합니다.쿼리는 이 쿼리가 없어도 작동하지만 일반적으로 훨씬 더 많은 데이터를 반환합니다.조건을 네스트된 쿼리와 외부 쿼리에 모두 기술할 필요는 없습니다(옵티마이저는 조건을 자동으로 푸시 다운해야 합니다).다만, 이 조건을 반복해도 문제가 되지 않습니다.
주문하셔야 합니다.
SELECT * FROM messages GROUP BY from_id ORDER BY timestamp DESC LIMIT 1
언급URL : https://stackoverflow.com/questions/10999522/how-to-get-the-latest-record-in-each-group-using-group-by
'programing' 카테고리의 다른 글
php serialize() 및 unserialize() 사용방법 (0) | 2022.12.27 |
---|---|
Java: NIO와 NIO.2의 차이점은 무엇입니까? (0) | 2022.12.27 |
WSO2 API Manager 1.10은 Maria를 지원합니까?DB (0) | 2022.12.27 |
특정 순서로 PHPUnit 테스트 실행 (0) | 2022.12.27 |
php의 플로트 비교 (0) | 2022.12.27 |