"student"유형의 각 사용자에 대해 "이름"과 최신 "점수"를 역순으로 표시하는 한 행을 반환하려고합니다.mySql INNER JOIN, MAX & DISTINCT
나는 두 테이블 사용자 & 서비스
사용자 표
id name type
---|-------|-----
1 | Bob | student
2 | Dave | student
3 | Larry | student
4 | Kevin | master
서비스 테이블
id score userId date
---|--------|-------|------------
1 | 14 | 1 | 2014-09-04
2 | 99 | 3 | 2014-09-03
3 | 53 | 2 | 2014-09-07
4 | 21 | 1 | 2014-09-08
5 | 79 | 2 | 2014-09-08
6 | 43 | 3 | 2014-09-10
7 | 72 | 3 | 2014-09-10
8 | 66 | 2 | 2014-09-01
9 | 43 | 3 | 2014-08-22
10 | 26 | 1 | 2014-08-22
원하는 결과를
id scores name date
---|--------|-------|------------
3 | 43 | Larry | 2014-09-10
1 | 21 | Bob | 2014-09-08
2 | 79 | Dave | 2014-09-08
ㅁ 나는 시도했다 :
그러나 항상 각 사용자에 대해 테이블의 마지막 날짜를 반환합니다.
그래서 나는 시도하고이 같은 다른 쪽 끝에서를 해결하기로 결정
SELECT servicesTemp.date, servicesTemp.score
FROM services servicesTemp
INNER JOIN
(SELECT userId, MAX(date) AS MaxExpDate
FROM services
GROUP BY clientId) servicesTempGrp
ON servicesTemp.userId = servicesTempGrp.userId
AND servicesTemp.MaxDate = servicesTempGrp.MaxDate
그러나 날짜는 이제까지 동일하면 내가 중복으로 끝날 것이라는 점을 깨닫고 난 단지 당 하나 개의 행을 반환 할 수 있습니다 사용자 (및 이중 그룹화가 작동하지 않음).
저는 지금이 일이 복잡해 졌다고 생각합니다. 그래서 인생 선은 크게 감사 할 것입니다.
당신이 래리의 점수로 (43) 및 (72) 사이에서 어떻게 선택합니까? – Arth
이 경우에는 하나만 반환되는 한 실제로 중요하지 않습니다. –
@ TraceyTurn : 그렇습니다. 왜냐하면 당신의'date'와'score's가 동기화되지 않았기 때문입니다. 당신은 * 어떤 *'score'가 리턴 될 것입니까? – NoobEditor