2013-01-23 136 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')