【问题标题】:Calculate years from each date in Oracle SQL从 Oracle SQL 中的每个日期计算年份
【发布时间】:2020-07-10 13:07:32
【问题描述】:

菜鸟问题。我正在编写一个脚本来执行一个报告,显示: 学生姓氏和名字(逗号分隔),注册年份,学术顾问姓氏和名字(逗号分隔) 排序:注册年份 过滤器:仅包括当前活跃的学生

努力计算在校学生的注册年数和过滤条件。

我正在使用的表格:

SELECT CONCAT(CONCAT(Student.Last_Name, ', '), Student.First_Name) AS "Student", 

Student_Enrollment_Status.Date_Status_Updated,

CONCAT(CONCAT(Faculty.Last_Name, ', '), Faculty.First_Name) AS "Advisor"

FROM Student

WHERE Faculty.Faculty_ID = Student.Advisor_ID

AND Student(Student_ID) = Student_Enrollment_Status(Student_ID)

AND Student_Enrollment_Status(Status_ID) = Enrollment_Status (Status_ID);

【问题讨论】:

标签: sql oracle oracle-sqldeveloper oracle-apex


【解决方案1】:

应该是这样的:

  • 第 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>

【讨论】:

  • 非常感谢!这种方式的 concat 似乎也更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多