我是在业余时间学习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岁且活着的患者
我的尝试:
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 )
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’) )
create table CHD_withoutp11
as
select *
from chd_patients201213
where patientid not in ( select patientid from P11_patients201213 )
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’) )
create table chd_withp11_1314
as
select *
from CHD_withoutp11
where patientid in ( select hesid from P11_patients201314 )
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')
请有人在我注意到的最后一点帮助我,我不确定。此外,如果在任何阶段你觉得可以改进以提高效率,请告诉我。
答案 0 :(得分:0)
为你解决这些问题会破坏乐趣,但是让我给你一些提示:
并非所有这些问题都要求CREATE TABLE
语句。如果问题是“ Find ... ”,他们可能正在寻找SELECT
声明; “删除... ”要求DELETE
,我不确定“最终数据集”应该是什么,但可能是{{ 1}}是正确的。
您可以使用更具可读性的CREATE TABLE ... AS
代替WHERE x IN ('value')
。
答案 1 :(得分:0)
我正在做类似的事情,所以看看我的帖子上的想法!很抱歉,其他用户认为他们正在为您工作,而不是协助