2017-10-14 1 views
1

저는 SAP HANA로 근무하고 있습니다. 다음은 계산 된보기의 일부 예제 데이터입니다. 원하는 결과는 마지막 열의 계산 된 열입니다.SQL 계산 컬럼

examplary...

나는 두 학생이있다. 학생이 마지막으로 교사를 보았던 날짜가 있습니다. 각 학생마다 SQL 문장으로 마지막으로 본 선생님을 계산하고 싶습니다. 어떤 생각?

+0

을 pls. DBMS (MySQL, MS SQL Server, Oracle 등) 태그를 사용합니다. –

+0

일부 샘플 데이터 및 원하는 결과를 추가하십시오. –

+0

지연 윈도우 기능 지원하는 dbms를 사용하는 경우 – GurV

답변

0

현재 윈도우 기능을 지원하지 않는 MySQL은,, 당신이 시도 할 수 :

SELECT 
    t1.*, 
    t3.TeacherID AS last_teacher 
FROM yourTable t1 
INNER JOIN 
(
    SELECT studentID, MAX(LastSeen) AS max_last_seen 
    FROM yourTable 
    GROUP BY studentID 
) t2 
    ON t1.studentID = t2.studentID 
INNER JOIN yourTable t3 
    ON t2.studentID  = t3.studentID AND 
     t2.max_last_seen = t3.LastSeen; 

사용 윈도우 기능을 우리가 약간 아래에 간단하게 조인 중 하나를 멀리 할 수 ​​있습니다

SELECT 
    t1.StudentID, 
    t1.TeacherID, 
    t1.LastSeen, 
    t2.TeacherID AS last_teacher 
FROM 
(
    SELECT StudentID, TeacherID, LastSeen, 
     MAX(LastSeen) OVER (PARTITION BY StudentID) AS max_last_seen 
    FROM yourTable 
) t1 
INNER JOIN yourTable t2 
    ON t1.StudentID  = t2.StudentID AND 
     t1.max_last_seen = t2.LastSeen; 
0

아래 검색어를 시도해보십시오.

SELECT * 
FROM table 
WHERE last_seen IN (
    SELECT Max(last_seen) 
    FROM table 
    GROUP BY student_id 
) 
+0

이것은 잠재적으로 모든 학생의 모든 기록을 반환합니다.이 기록은 마지막으로 본 시간이 주어진 학생의 최대 기록이었습니다. OP가 원하는 것이 아닌 것 같습니다. –

0

이 같은 oracle데시벨에 열을 기준으로 LastRecord를 얻을 수 Row_Number() 기능을 사용할 수 있습니다 :

Select * from 
(
    select 
    ROW_NUMBER() OVER (PARTITION BY studentId ORDER BY LastSeen desc) as rn, 
    studentId, 
    TeacherId 
    from yourTable 
) 
where rn = 1; 

이 기능은 그룹의 모든 studentId 및 명령 행을 모든 studentIdGroup에 대한 LastSeen 열을 기준으로. 그럼 당신은 사용하여 각 그룹의 첫 번째 행을 선택할 수있는 문 where rn = 1

UPDATE 당신이 당신의 테이블의 모든 행을 선택하려는 경우, 당신은이 같은 테이블이 선택 satement 가입하실 수 있습니다 :

select * from yourTable t 
join 
(
    Select * from 
    (
    select 
     ROW_NUMBER() OVER (PARTITION BY studentId ORDER BY LastSeen desc) as rn, 
     studentId, 
     TeacherId 
    from yourTable 
) 
    where rn = 1 
) s 
on t.studentId = s.studentId; 
+0

@TimBiegeleisen, 관심을 가져 주셔서 감사합니다. 답변을 업데이트했습니다. –