【问题标题】:SQL Query Join & Date ManipulationSQL 查询连接和日期操作
【发布时间】:2013-01-23 10:06:38
【问题描述】:

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

• “有多少之前因“不良行为”而被停学的学生已经被重新评估,以及 12 岁以上和 12 岁以下的学生人数”

我认为我需要使用三个表:人员状态历史记录(包含 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 并计算数字 >12 AND

谁能给点建议?

【问题讨论】:

    标签: sql oracle join


    【解决方案1】:

    将此视为:“哪些学生存在停学,随后会访问”...

    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
    

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

    【讨论】:

    • 嘿,谢谢,这看起来很棒!似乎是一个语法错误,我不熟悉? i.imgur.com/C9f0kox.jpg
    • 错误是什么?刚刚更正了将 group by 子句排除在代码块之外的格式
    • 我上面的评论有误(图片链接)
    • 我能够修改此代码以成功运行。除了语法错误,我需要稍微改变一下。谢谢,这很有帮助。 :)
    • 哦,去吃午饭了,忘了语法错误。对不起。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 2023-03-29
      相关资源
      最近更新 更多