0

如果有人可以在以下方面帮助我,我将不胜感激:我正在尝试编写一个代码(在 PowerSchool 中创建一个警报),该代码将指示学生是否比他们当前年级的平均水平年轻或年长。(例如,由于 2002 年 6 月 30 日之前出生的学生比 9 年级的平均年龄大)我似乎无法使 DECODE 与 >= TO_DATE 一起工作。这是我的声明:

select lastfirst, decode  (dob >=  to_date ('2002-06-30', 'yyyy-mm-dd'), 'old') DOB
from students
where grade_level = 9
order by lastfirst
4

1 回答 1

0

您可能可以在 sql 中使用 PowerSchool 解码,但我发现当包含的语言/系统较少时,代码更容易编写,所以我会省略它。我还会让 SQL 进行平均年龄计算,这样您就不必自己提供或计算平均日期(有关 TO_DATE 行的解释,请参阅oracle sql 中的平均日期)。

SELECT
    LastFirst AS "Student Name"
    ,CASE WHEN dob >= (
        SELECT
            TO_DATE(ROUND(AVG(TO_NUMBER(TO_CHAR(dob, 'J')))),'J')
        FROM Students
        WHERE Grade_Level = 9
        AND Enroll_Status = 0
    ) THEN 'Younger' ELSE 'Older' END AS "Older or Younger?"
FROM Students
WHERE Grade_Level = 9
ORDER BY LastFirst

子查询计算平均生日,CASE 语句将您的每条记录与该记录进行比较,报告它是旧的还是更小的。

在计算平均值的子查询中,我冒昧地假设您只想与当前注册的学生进行比较,因为退学的学生保持相同​​的年级水平。您真的不希望那些 10 年前离开但仍被列为 9 年级学生的学生弄乱您的平均数字。

于 2017-11-16T20:59:49.743 回答