2013-01-23 77 views
0

我遇到了特定的Oracle查询问题。我试图编写一个查询来提取以下数据。SQL查询加入和日期操作

•“如何谁先前暂停的原因,许多学生‘不良行为’,至今已重新评估,并在12岁和12岁以下的数字”

三表,我相信我需要使用:人员状态历史(包含REASON,SUSPEND_TO_DATE),person_visit(包含VISIT_DATE等字段)和person(包含PERSON_ID和BIRTH_DATE等字段)。

(PERSON_ID通用于所有表)。

这里是我的业余尝试,我还没有完全确定使用的连接&如何工作了超过12/12下仅使用BIRTH_DATE信息是另一个问题。

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 WHERE SUSPEND_TO_DATE是NOT NULL和理性= “85” 和VISIT_DATE> SUSPEND_TO_DATE和计数该数字> 12 AND < 12.

任何人都可以建议吗?

回答

2

思考这样的:“对于那些没有学生存在的悬浮对此有一个复诊” ......

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 

虽然没有测试过语法错误等。

+0

嘿,谢谢这看起来不错!似乎是一个语法错误,但我不熟悉? http://i.imgur.com/C9f0kox.jpg – GrumP

+0

什么是错误?刚刚更正的格式,离开代码块 –

+0

离开group by子句错误在我上面的评论(图片链接) – GrumP

0

试图将日期转换是这样的:

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