모든 사용자의 다중 표 예제에 대한 마지막 항목을 선택하십시오
-
21-12-2019 - |
문제
다음 테이블을 감안할 때 테이블 메시지
id message time_send
14 "first" 2014-02-10 22:16:31
15 "second" 2014-02-14 09:35:20
16 "third" 2014-02-13 09:35:47
17 "fourth" 2014-03-10 22:16:31
18 "fifth" 2014-03-14 09:35:20
19 "sixth" 2014-04-12 09:35:47
20 "seventh" 2014-04-13 09:35:47
21 "eighth" 2014-04-14 09:35:47
.
테이블 message_owner
id message_id owner_id cp_id
1 14 1 4
2 14 4 1
3 15 12 4
4 15 4 12
5 16 4 1
6 16 1 4
7 17 12 4
8 17 4 12
9 18 4 1
10 18 1 4
11 19 12 4
12 19 4 12
13 20 12 1
14 20 1 12
15 21 12 7
16 21 7 12
.
주어진 소유자에 대해 모든 카운터 파티 (cp_id)로 가장 최근의 메시지를 쿼리하고 싶습니다. 예를 들어 Owner_ID= 4는 다음과 같은 출력을 원합니다.
id message time_send owner_id cp_id
18 "fifth" 2014-03-14 09:35:20 4 1
19 "sixth" 2014-02-13 09:35:47 4 12
.
하나의 테이블로 많은 예를 볼 수 있지만 여러 가지 예에서는 이들을 다루지 못할 수 없습니다.
edit1 : 더 많은 항목 추가
해결책
이렇게해야합니다 :
SELECT m.id, m.message, mo.owner_id, mo.cp_id
FROM message m
JOIN message_owner mo ON m.id=mo.message_id
WHERE mo.owner_id=4
AND m.time_send=(
SELECT MAX(time_send)
FROM message m2
JOIN message_owner mo2 ON mo2.message_id=m2.id
WHERE mo2.owner_id=mo.owner_id
AND mo2.cp_id =mo.cp_id
)
.
... Timestamp 컬럼에있는 위치를 올바르게 작동하지 않을 수 있습니다.
공동이없는 동일한 예 :
SELECT m.id, m.time_send, m.message, mo.owner_id, mo.cp_id
FROM message m, message_owner mo
WHERE m.id = mo.message_id
AND mo.owner_id = 4
AND m.time_send = (
SELECT MAX(time_send)
FROM message m2, message_owner mo2
WHERE mo2.message_id = m2.id
AND mo2.owner_id = mo.owner_id
AND mo2.cp_id = mo.cp_id
);
.
제휴하지 않습니다 StackOverflow