2012-12-04 2 views
2

한 번 "위치"에 대해 하나와 "이미지"에 대해 두 개의 MySql 테이블이 있습니다. 가장 최근의 이미지 목록을 특정 (위치는 쉼표로 분리 된 목록)으로 설정해야하지만 가장 최근의 이미지에 대한 기록 만 반환하고 나는 힘들게 힘들어했습니다. 지금까지 올바른 결과를 얻었습니다.정렬 된 MySql 조인 쿼리에서 첫 번째 고유 값만 반환

그래서, 내가 가진 : 리턴

SELECT Locations.Name, Images.Date, Images.User 
FROM Locations INNER JOIN Images ON Locations.ID = Images.Location 
WHERE Locations.ID IN ('1','3') 
ORDER BY Images.Date DESC 

:

+---------------------------------------------+ 
| Name  | Date  | User   | 
|-------------|-------------|-----------------| 
| Indiana  | 2012-10-01 | Marie   | 
| Indiana  | 2012-06-22 | Ray    | 
| Illinois | 2011-09-18 | Robert   | 
| Indiana  | 2008-02-02 | Debra   | 
+---------------------------------------------+ 

내 질문은, 어떻게 내가 얻을 수

Locations: 
+---------------------------------------------+ 
| ID | Name         | 
|----|----------------------------------------| 
| 1 | Indiana        | 
| 2 | Ohio         | 
| 3 | Illinois        | 
+---------------------------------------------+ 

Images: 
+---------------------------------------------+ 
| ID | User | Location | Date    | 
|----|-------|-----------|--------------------| 
| 1 | Ray | 1   | 2012-06-22   | 
| 2 | Robert| 3   | 2011-09-18   | 
| 3 | Marie | 1   | 2012-10-01   | 
| 4 | Frank | 2   | 2010-12-11   | 
| 5 | Debra | 1   | 2008-02-02   | 
+---------------------------------------------+ 

그래서, 지금 나는 다음과 같은이 결과가 고유 한 Location.Name 값을 가진 첫 번째 레코드 만 반환하도록하려면? 따라서 최종 결과 테이블은 다음과 같습니다.

+---------------------------------------------+ 
| Name  | Date  | User   | 
|-------------|-------------|-----------------| 
| Indiana  | 2012-10-01 | Marie   | 
| Illinois | 2011-09-18 | Robert   | 
+---------------------------------------------+ 

감사합니다.

+0

아주 잘 설명 요구 사항 –

+0

@Sashi 칸트 : 감사합니다! 나는 분명히 그 예가 가능한 한 명확 해 지도록 열심히 노력했습니다. – JToland

+0

내 쿼리를 업데이트했습니다. 확인하십시오. –

답변

4

단순히 group by을 사용 ::

Select tempTable.Name, tempTable.Date, tempTable.User from 
(
    SELECT Locations.Name, Images.Date, Images.User, Locations.ID as locationID 
    FROM Locations 
    INNER JOIN Images ON Locations.ID = Images.Location 
    WHERE Locations.ID IN ('1','3') 

    ORDER BY Images.Date DESC 

) as tempTable GROUP BY tempTable.locationID 
+0

이것은 가장 최근의 이미지 레코드를 먼저 반환하지 않습니다. 주문 전에 그룹화하기 때문에 두 개의 레코드 만 반환하지만 가장 최근의 레코드가 아닌 두 개의 임의의 레코드입니다. – JToland

+0

내 검색어가 업데이트되었습니다. 지금 확인하십시오. –

+1

Perfect! 나는 마지막 두 테이블의 최종 테이블을'Date' 칼럼에서도 정렬되도록 추가적으로'ORDER BY Date DESC'를 추가했습니다.하지만 큰 문제는 아닙니다. 이것은 내가 필요한 정확한 대답이었다. 감사! – JToland

관련 문제