0

特定のOracleクエリで問題が発生しています。次のデータを取得するためのクエリを作成しようとしています。

•「「悪い行動」のために以前に停止された学生の数は、その後再評価され、12歳以上および12歳未満の数」

作業する必要があると思う3つのテーブル:person status history(REASON、SUSPEND_TO_DATEを含む)、person_visit(VISIT_DATEなどのフィールドを含む)、person(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 WHERE SUSPEND_TO_DATE IS NOT NULL AND REASON = "85" AND VISIT_DATE> SUSPEND_TO_DATE and count the number> 12AND<12。

誰かアドバイスできますか?

4

2 に答える 2

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

ただし、構文エラーなどはテストされていません。

于 2013-01-23T10:46:20.357 に答える
0

次のように日付を変換してみてください。

person.birth_date < TO_DATE('23-JAN-2000','DD-MM-YYYY')
于 2013-01-23T10:09:43.190 に答える