2016-07-25 3 views
0

아래와 같은 간단한 코드를 실행하려고합니다.SQL - 날짜를 기준으로 가장 최근 직원 정보를 선택하십시오.

SELECT MR.ID_NUMBER 
, MR.LAST_NAME 
, MR.FIRST_NAME 
, MR.EMAIL_ADDRESS 
, MR.ASSIGNMENT_STATUS 
, MR.assignment_start_Date 
, AD.Address_line1 
, AD.Town_Or_City 



FROM Master_Rv MR 
, Address_Details_v AD 


WHERE Last_Name = 'Test' 
and AD.Person_ID = MR.PERSON_ID 

이 코드를 실행하면 여러 행의 데이터가 생성됩니다. 가능하다면 가장 최근의 'Assignment_Start_Date'로만 데이터를 검색하고 싶습니다. 나는 그것이 의미가 있기를 바랍니다.

나는 내 연구를 해왔지만, 내 머리를 움츠 릴 수없는 것 같아서, 왜 내가 여기서 물어 왔는지. 많은 감사드립니다.

+1

당신은'그룹 by' 일부'최대 (MR.assignment_start_Date)' – valentin

+0

안녕 @valentin를 사용해야합니다. 무슨 소리 야? –

+0

여러 행에 동일한 "Assignment_Start_Date"가있는 경우? 어떤 행이 필요한가요? –

답변

2

먼저 올바른 JOIN 명시 적 구문을 사용하는 방법을 배우십시오. 간단한 규칙 : 쉼표는 FROM 절에 사용하십시오. 항상은 명시적인 JOIN 구문을 사용합니다.

귀하의 질문에 간단한 대답은 ROW_NUMBER()을 사용하는 것입니다

SELECT MR.ID_NUMBER, MR.LAST_NAME, MR.FIRST_NAME, 
     MR.EMAIL_ADDRESS, MR.ASSIGNMENT_STATUS, MR.assignment_start_Date, 
     AD.Address_line1, AD.Town_Or_City 
FROM Master_Rv MR JOIN 
    (SELECT ad.*, 
      ROW_NUMBER() OVER (PARTITION BY Person_ID ORDER BY Assignment_Start_Date DESC) as seqnum 
     FROM Address_Details_v AD 
    ) AD 
    ON AD.Person_ID = MR.Person_ID 
WHERE MR.Last_Name = 'Test' AND seqnum = 1; 
+0

안녕하세요 고든, 위의 게시물을 실행 해 보았습니다. 그러나 '예상대로 위치에서 키워드를 찾을 수 없음'이라는 오류 메시지가 표시되는 것 같습니다. 그리고 나는 이것이 'DESC as seqnum'을 가리키는 것으로 생각한다고 생각합니다. 이것이 왜 있는지 아십니까? 죄송하지만 완전한 아마추어처럼 들린다면, 나는 이것에 아주 새로운 것입니다! –

+1

@Chris_Finnerty 'DESC'뒤에 ')'을 옮깁니다 – Mottor

+0

Desc를 옮긴 후 문제가 계속 발생했습니다. 이것이 내가 테이블 대신 뷰를 사용하고 있다는 사실 때문일 수 있습니까? @Motor –

0
SELECT MR.ID_NUMBER 
, MR.LAST_NAME 
, MR.FIRST_NAME 
, MR.EMAIL_ADDRESS 
, MR.ASSIGNMENT_STATUS 
, MR.assignment_start_Date 
, AD.Address_line1 
, AD.Town_Or_City 



FROM Master_Rv MR 
, Address_Details_v AD 


WHERE Last_Name = 'Test' 
and AD.Person_ID = MR.PERSON_ID 
ORDER BY MR.assignment_start_Date DESC 
LIMIT 10; 

이 최신 assignment_start_Date에 기록을 주문하고 10 개 최신 데이터, 에 행을 제한하지만 당신은 가입 사용해야합니다 "FROM"대신 유효한 코드

+2

이것은 오라클입니다. 여기의 제한 절은 'FETCH FIRST 10 ROWS ONLY'이며 위의 Oracle 12.1에서만 존재합니다. – Mottor

0

sub select를 사용하면 동일한 person_id를 가진 사람의 최대 할당 시작일을 얻고이 레코드 만 가져 오는 데 사용됩니다.

SELECT MR.ID_NUMBER 
, MR.LAST_NAME 
, MR.FIRST_NAME 
, MR.EMAIL_ADDRESS 
, MR.ASSIGNMENT_STATUS 
, MR.assignment_start_Date 
, AD.Address_line1 
, AD.Town_Or_City 
FROM Master_Rv MR 
, Address_Details_v AD 
WHERE mr.Last_Name = 'Test' 
and MR.assignment_start_Date = (select max(assignment_start_Date) from Master_Rv where person_id=mr.person_id) 
and AD.Person_ID = MR.PERSON_ID 
관련 문제