SQL 查询连接和日期操作

Posted

技术标签:

【中文标题】SQL 查询连接和日期操作【英文标题】:SQL Query Join & Date Manipulation 【发布时间】: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

谁能给点建议?

【问题讨论】:

【参考方案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')

【讨论】:

以上是关于SQL 查询连接和日期操作的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库中SQL对日期查询相关操作

Sql server 查询指定时间区间工作日数休息日数等日期操作

从 vb.net 中的 datetime sql server 类型操作日期和时间

优化使用日期进行过滤和连接的 SQL 查询

如何创建 SQL 查询来计算按日期分组和连接的项目? [关闭]

操作日期,新的一天从特定时间开始 SQL