SQL Assisgnment帮助 - 获取年龄

时间:2016-10-29 14:43:13

标签: sql postgresql

我是在业余时间学习SQL的人,刚刚创建了一个帐户来请求我正在尝试的教程的一些帮助。我希望有人能帮助我。 下面是场景的上下文。请有人帮助我。一旦完成,我将完成第2部分,一旦完成,我将在此处发布以检查是否所有看起来都正确。只是一个注释我在发布之前就已经尝试过问题:

情境:  从包含2012年至今的数据的住院病人表中    有超过一百万条记录,执行以下操作(创建    子集,以便我们稍后可以更快地查询:

标准

  • 从2012年4月至2013年3月查找冠心病患者,可以进行诊断 主要或次要诊断。

  • 再次查找2012年4月至2013年3月的疾病'P11'患者 诊断可以是主要或次要诊断

  • 在2012年4月至3月期间,切除患有'P11'疾病的冠心病患者 2013

  • 2013年4月至2014年3月发现'P11'疾病

  • 2012年4月至2013年3月与冠心病患者建立最终数据集 与P11于2013年4月至2014年3月

  • 查找病例中最早诊断为'P11'的日期 定义的时间段,这将被定义为索引日期

  • 在索引日期查找年龄超过19岁且活着的患者

我的尝试

  • 查找CHD患者2012年4月至2013年3月:
create table chd_patients201213 
as
select * 
from inpatient 
where enddate between '2012-04-01' and '2013-03-31' 
and ( ( left(Primary_diag, 3) in ( ‘CHD’ ) ) 
   or ( left(Secondary_diag, 3) in ( ‘CHD )
  • 2012 - 2013年有P11的患者:
create table P11_patients201213 as 
select * from inpatient where disdate between '2012-04-01' and '2013-03-31' 
and ( left(primary_diag, 3) in (‘P11') or left(secondary_diag, 3) in (‘P11’) )
  • 移除2012 - 2013年诊断为P11的冠心病患者
create table CHD_withoutp11 
as 
select * 
from chd_patients201213 
 where patientid not in ( select patientid from P11_patients201213 )
  • 2013年4月至2014年3月发现'P11'疾病
create table P11_patients201314 as 
select * 
from inpatient 
where disdate between '2013-04-01' and '2014-03-31' 
and ( left(primary_diag, 3) in (‘P11') 
   or left(secondary_diag, 3) in (‘P11’) )
  • 2012年4月至2013年3月与CHD患者建立最终数据集 P11于2013年4月至2014年3月
create table chd_withp11_1314 
as 
select * 
from CHD_withoutp11 
where patientid in ( select hesid from P11_patients201314 )
  • 查找病例期间最早诊断为'P11'的日期 定义的时间段,这将被定义为索引日期
create table chd_index 
as 
select patientid, min(disdate) as indexdate
from chd_withp11_1314 
group by patientid
  • 在指数日期找到年龄超过19岁且活着的患者*(我不确定 这,但这是我已经完成的步骤):

    在索引日期查找患者年龄

create table chd_age 
as 
select t1.patientid, t1.endage as age, t1.dismeth, t2.indexdate
from chd_withp11_1314 t1 
   inner join chd_index t2 
           on t1.patientid=t2.patientid 
          and t1.disdate=t2.indexdate 
group by t1.hesid, t1.endage, t2.indexdate,t1.dismeth

年龄在19岁以上并且在指数日期存活的患者

create table chd_18andalive as 
select distinct (patientid),age,dismeth 
from chd_age 
where (age between 19 and 250 ) 
and dismeth not in ('dead')

请有人在我注意到的最后一点帮助我,我不确定。此外,如果在任何阶段你觉得可以改进以提高效率,请告诉我。

2 个答案:

答案 0 :(得分:0)

为你解决这些问题会破坏乐趣,但是让我给你一些提示:

  • 并非所有这些问题都要求CREATE TABLE语句。如果问题是“ Find ... ”,他们可能正在寻找SELECT声明; “删除... ”要求DELETE,我不确定“最终数据集”应该是什么,但可能是{{ 1}}是正确的。

  • 您可以使用更具可读性的CREATE TABLE ... AS代替WHERE x IN ('value')

答案 1 :(得分:0)

我正在做类似的事情,所以看看我的帖子上的想法!很抱歉,其他用户认为他们正在为您工作,而不是协助