2017-04-10 7 views
0

그래서 내 문제가이 문맥에 삽입됩니다. 학생용 응용 프로그램을 관리하기위한 과목이 별도로 있습니다.가장 최근의 행 선택

  • StudentId :이 응용 프로그램은 다음과 같은 구조의 테이블에 저장되어있는 학생 [기본 키]의 ID
  • CourseId : 과정 [기본 키]
  • 의 ID StatusVerificationDate : 응용 프로그램의 상태가 확인 된 날짜 [기본 키]
  • 상태 : 현재 진행 상태 ("진행 중", "거부 됨", "승인 됨"일 수 있음)

내 문제는 : 각 학생과 코스에 대해 가장 최근 행을 가져와야합니다.

StudentId CourseId StatusVarificationDate  Status 
1   1001  2011-12-12 07:27:24 In Progress 
1   1001  2011-12-12 09:27:24 In Progress 
1   1002  2011-12-13 15:27:24 Admited 
2   1001  2011-12-12 09:27:24 In Progress 
2   1001  2011-12-12 15:27:24 Admited 

위의 예에서 어떻게 결과를 얻을 수 있습니까?

StudentId CourseId StatusVerificationDate  Status 
1   1001  2011-12-12 09:27:24 In Progress 
1   1002  2011-12-13 15:27:24 Admited 
2   1001  2011-12-12 15:27:24 Admited 
+0

https://i.imgur.com/lUmelWO.png 괜찮습니다. – Sebas

+0

저는 여기에 새로운 사람입니다. 죄송합니다. 다음 번에 시도해 보겠습니다. –

답변

0

사용 ROW_NUMBER() 다음과 같이 파티션과 : row_number()를 사용

;With T AS 
(
    SELECT 
     *,   
     ROW_NUMBER() OVER(PARTITION BY StudentId,CourseId ORDER BY StatusVarificationDate DESC) AS PartNo 
    FROM @tblTest 
) 
SELECT 
    * 
FROM T 
WHERE PartNo=1 
+0

나는 그것이 'StudentId, CourseId by PARTITION'이어야한다고 생각한다. – TriV

+0

예 @Triv 나의 실수, 수정 해 주셔서 감사합니다. –

+0

빠른 답장을 보내 주셔서 감사합니다. 나는 SQL에서 그렇게 많은 경험이 없기 때문에 '파티션'은 나에게 새로운 것이다. 왜이 쿼리에서이 키워드를 사용하는지에 대한 간단한 설명을 주시겠습니까? –

0

사용 MAX 집계 함수에 가입 문 :

SELECT * 
FROM table1 
JOIN 
(
    SELECT StudentId, CourseId MAX(StatusUpdateDate) Maxdate 
    FROM table1  
) A ON A.Maxdate = StatusUpdateDate AND A.StudentId = table1.StudentId 
1

이 일반적으로 처리됩니다

select t.* 
from (select t.*, 
      row_number() over (partition by StudentId, CourseId 
           order by StatusVarificationDate desc 
           ) as seqnum 
     from t 
    ) t 
where seqnum = 1;