2017-11-19 1 views
-1

중첩 된 JOIN을 사용하고 있으며, 정렬 된 날짜가있는 열 BOARDING_LAST_EDIT을 예상합니다.중첩 된 MySQL JOIN이 원하는 열을 생성하지 않습니다.

SELECT 

OWNER.ID AS OWNER_ID, 
OWNER.FIRST_NAME, 
OWNER.LAST_NAME, 
OWNER.EMAIL 

FROM OWNER 

LEFT JOIN (
    SELECT OWNER_ID, LAST_EDIT AS BOARDING_LAST_EDIT 
    FROM BOARDING 
    WHERE BOARDING.LAST_EDIT > '2017-01-01' 
    ORDER BY BOARDING.LAST_EDIT DESC 
) AS BOARDING_NESTED_TABLE_ORDERED 
ON OWNER.ID = BOARDING_NESTED_TABLE_ORDERED.OWNER_ID 

GROUP BY OWNER_ID 

ORDER BY BOARDING_LAST_EDIT DESC 

나는이 반환 무엇입니까 :

| OWNER_ID | FIRST_NAME | LAST_NAME | 이메일 |

내가 원하는 : | OWNER_ID | FIRST_NAME | LAST_NAME | 이메일 | BOARDING_LAST_EDIT을 |

나는 중첩 된 "BOARDING_LAST_EDIT AS "는 추가 열 BOARDING_LAST_EDIT

에게의 요점을 반환 할 것이라고 기대하고 있었다 조인 중첩 - 결과가 처음에만 최신 날짜 순으로 수익을 그룹화 한 것입니다 . 최신 날짜 아래의 모든 날짜는 삭제할 수 있습니다.

테이블을 정렬하기 전에 가입하면 그룹화 기능이 느슨합니다.

답변

1

이게 당신이 찾고 있는게 있나요?

SELECT 
    OWNER.ID AS OWNER_ID, 
    OWNER.FIRST_NAME, 
    OWNER.LAST_NAME, 
    OWNER.EMAIL, 
    BOARDING_NESTED_TABLE_ORDERED.BOARDING_LAST_EDIT 
FROM OWNER 
LEFT JOIN 
(
    SELECT 
     OWNER_ID, 
     LAST_EDIT AS BOARDING_LAST_EDIT 
    FROM BOARDING 
    WHERE BOARDING.LAST_EDIT > '2017-01-01' 
    ORDER BY BOARDING.LAST_EDIT DESC 
) BOARDING_NESTED_TABLE_ORDERED 
ON OWNER.ID = BOARDING_NESTED_TABLE_ORDERED.OWNER_ID 
GROUP BY OWNER_ID 
ORDER BY BOARDING_LAST_EDIT DESC 

나는 기본적으로 단지 결합 된 데이터 집합을 참조, 초기 선택에 필요한 필드를 당겨 추가했습니다.

+0

예! - 내가 원하는 결과를 만들어 낸다. 필자는 필드 목록이 외부 선언의 일부가 될 필요가 있다고 생각했습니다. 단순히 'LAST_EDIT'열을 마지막으로 알려진 날짜 순서대로 정렬 한 다음 그룹화하기 만하면됩니다. 나는이 일을하는 다른 방법을 생각할 수 없었다. 진술이 이것을 성취하는 적절한 방법으로 보입니까? 이 쿼리는 다소 느립니다. –

+1

"BOARDING_LAST_EDIT"필드의 유형은 무엇입니까? OWNER_ID 당 그룹의 값 중 가장 높은 값을 검색하는 데 "MAX()"를 사용할 수 있습니까? –

+0

'타임 스탬프'입니다. –

관련 문제