应该是这样的:
- 第 1 - 22 行代表样本数据(您无需输入)
- 您需要的查询从第 #24 行开始
- 入学年数减去当年入学年数;这相当不准确,但是 - 你没有解释确切这意味着什么
- 我假设活动状态是 ID (2, 3, 5)
SQL> with
2 student (student_id, first_name, last_name, advisor_id) as
3 (select 1, 'ash', 'smith', 9 from dual union all
4 select 2, 'tash', 'paul', 8 from dual union all
5 select 3, 'carl', 'wall', 6 from dual union all
6 select 4, 'fred', 'john', 3 from dual),
7 student_enrollment_status (student_id, status_id, date_status_updated) as
8 (select 1, 2, date '2017-09-04' from dual union all
9 select 2, 3, date '2018-09-05' from dual union all
10 select 3, 3, date '2018-09-05' from dual union all
11 select 4, 2, date '2019-09-04' from dual),
12 enrollment_status (status_id, status) as
13 (select 2, 'enrolled' from dual union all
14 select 3, 'on leave' from dual union all
15 select 4, 'full time' from dual union all
16 select 5, 'part time' from dual union all
17 select 6, 'withdrawn' from dual),
18 faculty (faculty_id, first_name, last_name) as
19 (select 9, 'jane', 'gold' from dual union all
20 select 8, 'sam', 'greene' from dual union all
21 select 6, 'mark', 'west' from dual union all
22 select 3, 'jen', 'dash' from dual)
23 --
24 select s.last_name ||', '|| s.first_name student,
25 extract(year from sysdate) - extract(year from ses.date_status_updated)
26 years_enrolled,
27 f.last_name ||', '|| f.first_name advisor
28 from student s join student_enrollment_status ses on ses.student_id = s.student_id
29 join enrollment_status es on es.status_id = ses.status_id
30 join faculty f on f.faculty_id = s.advisor_id
31 where es.status_id in (2, 3, 5)
32 order by years_enrolled;
STUDENT YEARS_ENROLLED ADVISOR
----------- -------------- ------------
john, fred 1 dash, jen
paul, tash 2 greene, sam
wall, carl 2 west, mark
smith, ash 3 gold, jane
SQL>