저는 SAP HANA로 근무하고 있습니다. 다음은 계산 된보기의 일부 예제 데이터입니다. 원하는 결과는 마지막 열의 계산 된 열입니다.SQL 계산 컬럼
나는 두 학생이있다. 학생이 마지막으로 교사를 보았던 날짜가 있습니다. 각 학생마다 SQL 문장으로 마지막으로 본 선생님을 계산하고 싶습니다. 어떤 생각?
저는 SAP HANA로 근무하고 있습니다. 다음은 계산 된보기의 일부 예제 데이터입니다. 원하는 결과는 마지막 열의 계산 된 열입니다.SQL 계산 컬럼
나는 두 학생이있다. 학생이 마지막으로 교사를 보았던 날짜가 있습니다. 각 학생마다 SQL 문장으로 마지막으로 본 선생님을 계산하고 싶습니다. 어떤 생각?
현재 윈도우 기능을 지원하지 않는 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;
아래 검색어를 시도해보십시오.
SELECT *
FROM table
WHERE last_seen IN (
SELECT Max(last_seen)
FROM table
GROUP BY student_id
)
이것은 잠재적으로 모든 학생의 모든 기록을 반환합니다.이 기록은 마지막으로 본 시간이 주어진 학생의 최대 기록이었습니다. OP가 원하는 것이 아닌 것 같습니다. –
이 같은 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;
@TimBiegeleisen, 관심을 가져 주셔서 감사합니다. 답변을 업데이트했습니다. –
을 pls. DBMS (MySQL, MS SQL Server, Oracle 등) 태그를 사용합니다. –
일부 샘플 데이터 및 원하는 결과를 추가하십시오. –
지연 윈도우 기능 지원하는 dbms를 사용하는 경우 – GurV