繁体   English   中英

SQL查询联接和日期操作

[英]SQL Query Join & Date Manipulation

我在处理特定的Oracle查询时遇到问题。 我正在尝试编写查询以提取以下数据。

•“自那时以来,已经重新评估了多少名先前因“不良行为”而被停学的学生,以及12岁以上和12岁以下的学生人数”

我认为我需要使用三个表:人员状态历史记录(包含REASON,SUSPEND_TO_DATE),人员访问(包含字段VISIT_DATE)和人员(包含字段如PERSON_ID和BIRTH_DATE)。

(PERSON_ID在所有表中通用。)

这是我的业余尝试,我仍然不完全确定联接的使用以及如何仅使用BIRTH_DATE信息解决12岁以上/ 12岁以下的问题。

select count (*) from person_status_history 
inner join person_visit on person_status_history.person_id=person_visit.person_id
inner join person on person_visit.person_id=person.person_id
where person_status_history.reason_code = 85 and person_visit.reasses_appoint_no is not null and person.birth_date < '23-JAN-2000';

在基本的伪代码中,我想我需要开发的是(非常粗糙!):

SELECT * PERSON_ID SUSPEND_TO_DATE不为NULL且REASON =“ 85” AND VISIT_DATE> SUSPEND_TO_DATE并计数> 12 AND <12。

有人可以建议吗?

考虑如下:“针对哪些学生存在停学,随后将进行访问” ...

select case when p.date_of_birth < current_date - interval '12 year'
       then '< 12'
       else '12+'
       end age_bracket,
       count (*)
from   person p
where  exists (
         select null
         from   person_status_history psh
         where  psh.person_id   = p.person_id and
                psh.reason_code = 85          and
                exists (
                  select null
                  from   person_visit pv
                  where  pv.person_id          = psh.person_id and
                         pv.reasses_appoint_no is not null     and
                         pv.visit_date         > psh.suspend_to_date)
group by case when p.date_of_birth < current_date - interval '12 year'
         then '< 12'
         else '12+'
         end

虽然未测试语法错误等。

尝试像这样转换您的日期:

person.birth_date < TO_DATE('23-JAN-2000','DD-MM-YYYY')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM